gnu: python-deepmerge: Use pyproject-build-system.
[jackhill/guix/guix.git] / gnu / packages / geo.scm
index 8de186a..5e484c6 100644 (file)
@@ -7,17 +7,19 @@
 ;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018, 2019, 2020, 2021 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2019, 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2021 Wiktor Żelazny <wzelazny@vurv.cz>
 ;;; Copyright © 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2020, 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2020, 2021, 2022 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2021 Nikolay Korotkiy <sikmir@disroot.org>
+;;; Copyright © 2021, 2022 Nikolay Korotkiy <sikmir@disroot.org>
+;;; Copyright © 2022 Roman Scherer <roman.scherer@burningswell.com>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,6 +47,7 @@
   #:use-module (guix build-system qt)
   #:use-module (guix build-system scons)
   #:use-module (guix build-system r)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
@@ -62,6 +65,7 @@
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages haskell-apps)
+  #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages image)
   #:use-module (gnu packages image-processing)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages java)
   #:use-module (gnu packages kde)
+  #:use-module (gnu packages libusb)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages time)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
 
+(define-public cdo
+  (package
+    (name "cdo")
+    (version "2.0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://code.mpimet.mpg.de/attachments/download/26823/cdo-"
+                     version ".tar.gz"))
+              (sha256
+               (base32
+                "1khdbd5cmnn7qm6hcqg4md5wbq14fs6brrns8b3g18diqgqvpvpd"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:configure-flags
+           #~(list (string-append "--with-netcdf="
+                                  #$(this-package-input "netcdf")))))
+    (inputs
+     (list netcdf))
+    (native-inputs
+     (list pkg-config))
+    (home-page "https://code.mpimet.mpg.de/projects/cdo")
+    (synopsis "Climate data operators")
+    (description "@acronym{CDO, Climate Data Operators} is a collection of command-line
+operators to manipulate and analyse climate and NWP model data.  Supported
+data formats are GRIB 1/2, netCDF 3/4, SERVICE, EXTRA and IEG.  There are more
+than 600 operators available.")
+    (license license:bsd-3)))
+
 (define-public memphis
   (package
     (name "memphis")
@@ -181,7 +219,7 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
 (define-public geos
   (package
     (name "geos")
-    (version "3.8.1")
+    (version "3.11.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.osgeo.org/geos/geos-"
@@ -189,8 +227,8 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1xqpmr10xi0n9sj47fbwc89qb0yr9imh4ybk0jsxpffy111syn22"))))
-    (build-system gnu-build-system)
+                "12l59pxawyizmc4wn20dvjn7aifqwkim4ysmc78h91mayjmqravr"))))
+    (build-system cmake-build-system)
     (arguments `(#:phases
                  (modify-phases %standard-phases
                    (add-after
@@ -198,11 +236,10 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
                     (lambda _
                       (substitute* '("tests/xmltester/testrunner.sh"
                                      "tests/geostest/testrunner.sh")
-                        (("/bin/sh") (which "sh")))
-                      #t)))))
+                        (("/bin/sh") (which "sh"))))))))
     (inputs
      (list glib))
-    (home-page "https://geos.osgeo.org/")
+    (home-page "https://libgeos.org/")
     (synopsis "Geometry Engine for Geographic Information Systems")
     (description
      "GEOS provides a spatial object model and fundamental geometric
@@ -218,7 +255,7 @@ topology functions.")
 (define-public gnome-maps
   (package
     (name "gnome-maps")
-    (version "41.2")
+    (version "43.0")                    ;for libsoup 3 support
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -226,77 +263,62 @@ topology functions.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "037xmkmcmcw87vb1c1s3y225m8757k331cvk1m8cshf6mx61p0l1"))))
+                "1r1l6ajs6zz316m8zac5r0l3qgdv616xh376bfn2fflcnz7wys08"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'skip-gtk-update-icon-cache
-           ;; Don't create 'icon-theme.cache'.
-           (lambda _
-             (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))))
-         (add-after 'unpack 'patch-dbus-service
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "data/org.gnome.Maps.service.in"
-               (("@pkgdatadir@/org.gnome.Maps")
-                (string-append  (assoc-ref outputs "out")
-                                "/bin/gnome-maps")))))
-         (add-after 'install 'wrap
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (gi-typelib-path (getenv "GI_TYPELIB_PATH"))
-                   (geocode-glib-path (string-append
-                                       (assoc-ref inputs "geocode-glib")
-                                       "/lib"))
-                   (goa-path (string-append
-                              (assoc-ref inputs "gnome-online-accounts:lib")
-                              "/lib"))
-                   (gdk-pixbuf-path (string-append
-                                     (assoc-ref inputs "gdk-pixbuf")
-                                     "/lib"))
-                   (webkitgtk-path (string-append
-                                    (assoc-ref inputs "webkitgtk")
-                                    "/lib")))
-               (wrap-program (string-append out "/bin/gnome-maps")
-                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-
-                 ;; There seems to be no way to embed the path of
-                 ;; libgoa-1.0.so.0, libwebkit2gtk-4.0.so.37,
-                 ;; libgdk_pixbuf-2.0.so, libjavascriptcoregtk-4.0.so.18, and
-                 ;; libgeocode-glib.so.0
-                 `("LD_LIBRARY_PATH" ":" prefix (,goa-path
-                                                 ,webkitgtk-path
-                                                 ,gdk-pixbuf-path
-                                                 ,geocode-glib-path)))
-               #t))))))
+     (list
+      #:glib-or-gtk? #t
+      #:meson meson-0.63
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'skip-cache-and-database-updates
+            (lambda _
+              (substitute* "meson.build"
+                (("([a-z_]*): true" all option)
+                 (cond                ; cond rather than match saves an import
+                  ((member option '("gtk_update_icon_cache"
+                                    "update_desktop_database"))
+                   (string-append option ": false"))
+                  (else all))))))
+          (add-after 'install 'wrap
+            (lambda _
+              (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
+                (substitute* (string-append #$output "/share/gnome-maps/"
+                                            "org.gnome.Maps")
+                  (("imports\\.package\\.init" all)
+                   (string-append "'" gi-typelib-path "'.split(':').forEach("
+                                  "path => imports.gi.GIRepository.Repository."
+                                  "prepend_search_path(path));\n"
+                                  all)))))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           pkg-config))
     (inputs
-     `(("evolution-data-server" ,evolution-data-server)
-       ("folks" ,folks)
-       ("libchamplain" ,libchamplain)
-       ("libgee" ,libgee)
-       ("libhandy" ,libhandy)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup-minimal-2)
-       ("libgweather" ,libgweather)
-       ("libxml2" ,libxml2)
-       ("librsvg" ,librsvg)
-       ("glib-networking" ,glib-networking)
-       ("geoclue" ,geoclue)
-       ("geocode-glib" ,geocode-glib)
-       ("gfbgraph" ,gfbgraph)
-       ("gjs" ,gjs)
-       ("glib" ,glib)
-       ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("rest" ,rest)
-       ("webkitgtk" ,webkitgtk-with-libsoup2)))
+     (list folks
+           evolution-data-server
+           geoclue
+           geocode-glib
+           gfbgraph
+           gjs
+           glib
+           glib-networking
+           gnome-online-accounts
+           gsettings-desktop-schemas
+           gtk+
+           libadwaita
+           libgee
+           libgweather4
+           libhandy
+           librsvg
+           libsecret
+           libshumate
+           libsoup
+           libxml2
+           pango-next                   ;TODO: remove when it's the default
+           rest-next
+           webkitgtk))
     (synopsis "Graphical map viewer and wayfinding program")
     (description "GNOME Maps is a graphical map viewer.  It uses map data from
 the OpenStreetMap project.  It can provide directions for walking, bicycling,
@@ -307,18 +329,14 @@ and driving.")
 (define-public libgeotiff
   (package
     (name "libgeotiff")
-    (version "1.5.1")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://download.osgeo.org/geotiff/libgeotiff/libgeotiff-"
                            version ".tar.gz"))
-       (patches (search-patches
-                 ;; See libgeotiff 1.5.1 issue
-                 ;; https://github.com/OSGeo/libgeotiff/issues/22
-                 "libgeotiff-adapt-test-script-for-proj-6.2.patch"))
        (sha256
-        (base32 "0b31mlzcv5b1y7jdvb7p0pa3xradrg3x5g32ym911lbhq4rrgsgr"))
+        (base32 "1mjmgv48x51ppax5dnb6lq7z600czxll53bx6jbzqwd4m93i7aq5"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -479,6 +497,8 @@ coverages using a SpatiaLite DBMS.")
     (arguments
      `(#:configure-flags
        '("--enable-rttopo=yes")
+       ;; FIXME: Several tests fail with Proj 9.
+       #:tests? #f
        #:phases
        (modify-phases %standard-phases
          ;; 1 test is failing, ignore it:
@@ -505,7 +525,7 @@ fully fledged Spatial SQL capabilities.")
 (define-public proj
   (package
     (name "proj")
-    (version "7.2.1")
+    (version "9.1.0")
     (source
      (origin
        (method url-fetch)
@@ -513,20 +533,10 @@ fully fledged Spatial SQL capabilities.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "050apzdn0isxpsblys1shrl9ccli5vd32kgswlgx1imrbwpg915k"))))
+         "0593vd9sac0c98j1f4rammd90d4xnhygbr6d49i8il6ajjdj7cl1"))))
     (build-system cmake-build-system)
-    (arguments
-     `(#:configure-flags '("-DUSE_EXTERNAL_GTEST=ON")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-version
-           (lambda _
-             (substitute* "CMakeLists.txt"
-               (("MAJOR 7 MINOR 2 PATCH 0") "MAJOR 7 MINOR 2 PATCH 1")))))))
-    (inputs
-     (list curl libjpeg-turbo libtiff sqlite))
-    (native-inputs
-     (list googletest pkg-config))
+    (native-inputs (list googletest pkg-config))
+    (propagated-inputs (list curl libtiff sqlite)) ;required by proj.pc
     (home-page "https://proj.org/")
     (synopsis "Coordinate transformation software")
     (description
@@ -543,6 +553,27 @@ lets developers use the functionality of Proj in their own software.")
                    ;; src/geodesic.*, src/tests/geodtest.cpp
                    license:x11))))
 
+; This is the last version of proj that provides the old proj.4 API.
+(define-public proj-7
+  (package (inherit proj)
+    (version "7.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://download.osgeo.org/proj/proj-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "050apzdn0isxpsblys1shrl9ccli5vd32kgswlgx1imrbwpg915k"))))
+    (arguments
+     `(#:configure-flags '("-DUSE_EXTERNAL_GTEST=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("MAJOR 7 MINOR 2 PATCH 0") "MAJOR 7 MINOR 2 PATCH 1")))))))))
+
 (define-public proj.4
   (package
     (name "proj.4")
@@ -596,14 +627,14 @@ projections.")
 (define-public python-pyproj
   (package
     (name "python-pyproj")
-    (version "3.2.1")
+    (version "3.3.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "pyproj" version))
         (sha256
           (base32
-            "0xrqpy708qlyd7nqjra0dl7nvkqzaj9w0v7wq4j5pxazha9n14sa"))))
+            "1gjg63irs44djyqbp9gg7s02d0y5i9cd1a83phyzp5fcj56y3n5k"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -653,8 +684,14 @@ projections and coordinate transformations library.")
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
+             (setenv "GDAL_ENABLE_DEPRECATED_DRIVER_GTM" "YES")
              (when tests?
-               (invoke "pytest" "-m" "not network and not wheel")))))))
+               (invoke "pytest"
+                       "-m" "not network and not wheel"
+                       ;; FIXME: Find why the
+                       ;;   test_no_append_driver_cannot_append[PCIDSK]
+                       ;; test is failing.
+                       "-k" "not test_no_append_driver_cannot_append")))))))
     (inputs
       (list gdal))
     (propagated-inputs
@@ -706,9 +743,14 @@ pyproj, Rtree, and Shapely.")
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (invoke "pytest"
-                       ; Disable test that fails with
-                       ; NotImplementedError in pandas.
-                       "-k" "not test_fillna_no_op_returns_copy"
+                       ; Disable tests that fail due to incompatibilities
+                       ; with our pandas version.
+                       "-k"
+                       (string-append
+                         "not test_getitem_invalid"
+                         " and not test_value_counts"
+                         " and not test_setitem_invalid"
+                         " and not test_insert_invalid")
                        ; Disable tests that require internet access.
                        "-m" "not web")))))))
     (propagated-inputs
@@ -725,44 +767,138 @@ enables you to easily do operations in Python that would otherwise
 require a spatial database such as PostGIS.")
     (license license:bsd-3)))
 
-(define-public mapnik
+(define-public python-osmnx
   (package
-    (name "mapnik")
-    (version "3.0.18")
+    (name "python-osmnx")
+    (version "1.1.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/mapnik/mapnik/releases/download/v"
-                           version "/mapnik-v" version ".tar.bz2"))
+       ; Fetch from github as the pypi package is missing the tests dir.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/gboeing/osmnx")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "06frcikaj2mgz3abfk5h0z4j3hbksi0zikwjngbjv4p5f3pwxf8q"))))
-    (build-system scons-build-system)
-    (inputs
-     (list boost
-           cairo
-           freetype
-           harfbuzz
-           icu4c
-           libjpeg-turbo
-           libpng
-           libtiff
-           libwebp
-           libxml2
-           proj.4
-           sqlite
-           zlib))
-    (native-inputs
-     (list pkg-config))
+        (base32 "1n8qjn184p5a2s3j6x6iyc1i7p3l3xnbqqxm6ajwgwv6j5fw1d5a"))))
+    (build-system python-build-system)
     (arguments
-     `(#:scons ,scons-python2
-       #:scons-flags
-       (list "CC=gcc"
-             (string-append "PREFIX=" %output)
-             (string-append "CUSTOM_LDFLAGS=-Wl,-rpath=" %output "/lib"))))
-    (home-page "https://mapnik.org/")
-    (synopsis "Toolkit for developing mapping applications")
-    (description "Mapnik is a toolkit for developing mapping applications.  It
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               ; TODO: Disable network tests
+               (invoke "pytest" "tests"
+                       "-k"
+                       (string-append
+                         ;; The following tests require network access.
+                         "not test_geocode_to_gdf"
+                         " and not test_stats"
+                         " and not test_osm_xml"
+                         " and not test_elevation"
+                         " and not test_routing"
+                         " and not test_plots"
+                         " and not test_find_nearest"
+                         " and not test_api_endpoints"
+                         " and not test_graph_save_load"
+                         " and not test_graph_from_functions"
+                         " and not test_geometries"))))))))
+    (propagated-inputs
+      (list python-folium
+            python-geopandas
+            python-matplotlib
+            python-networkx
+            python-numpy
+            python-pandas
+            python-pyproj
+            python-requests
+            python-rtree
+            python-shapely))
+    (native-inputs
+      (list python-numpy python-pytest))
+    (home-page "https://github.com/gboeing/osmnx")
+    (synopsis
+      "Retrieve, model, analyze, and visualize OpenStreetMap street networks")
+    (description
+      "OSMnx is a Python library that lets you download geospatial data
+from OpenStreetMap and model, project, visualize, and analyze real-world
+street networks and any other geospatial geometries.  You can download
+and model walkable, drivable, or bikeable urban networks with a single
+line of Python code then easily analyze and visualize them.  You can
+just as easily download and work with other infrastructure types,
+amenities/points of interest, building footprints, elevation data,
+street bearings/orientations, and speed/travel time.")
+    (license license:expat)))
+
+(define-public mapnik
+  ;; There hasn't been a release since early 2021, and it fails to build with
+  ;; Boost 1.77+.
+  (let ((commit "81103491b467e17218140f50bc0bb9dc8c1f0317")
+        (revision "0"))
+    (package
+      (name "mapnik")
+      (version (git-version "3.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/mapnik/mapnik")
+               (commit commit)
+               ;; TODO: Un-bundle mapbox dependencies (not yet packaged).
+               (recursive? #t)))        ;for mapbox dependencies and test data
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "094nam57bdd5nak88qy33z2p3kjahk3vk2nk56m5jkcr5d3hlnx2"))))
+      (build-system qt-build-system)
+      (arguments
+       (list
+        #:cmake cmake                   ;for FIND_PACKAGE_ARGS
+        #:configure-flags
+        #~(list (string-append "-DCMAKE_CXX_FLAGS=-I"
+                               #$(this-package-native-input "catch2")
+                               "/include/catch2"))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'use-system-catch2
+              (lambda _
+                (substitute* "test/CMakeLists.txt"
+                  (("GIT_TAG.*v2.13.7" all)
+                   (string-append all "\n"
+                                  "  FIND_PACKAGE_ARGS NAMES Catch2"))
+                  (("^include.*Catch2_SOURCE_DIR.*contrib/Catch.cmake.*")
+                   "include(Catch)\n"))))
+            (add-after 'unpack 'disable-problematic-tests
+              (lambda _
+                ;; The 'ogr' test fails for unknown reasons.  Mark it as
+                ;; expected to fail (see:
+                ;; https://github.com/mapnik/mapnik/issues/4329).
+                (substitute* "test/unit/datasource/ogr.cpp"
+                  (("TEST_CASE\\(\"ogr\"" all)
+                   (string-append all ", \"[!shouldfail]\""))))))))
+      (native-inputs
+       (list catch2
+             pkg-config
+             postgresql))
+      (inputs
+       (list boost
+             cairo
+             freetype
+             gdal
+             harfbuzz
+             icu4c
+             libjpeg-turbo
+             libpng
+             libtiff
+             libwebp
+             libxml2
+             proj
+             sqlite
+             zlib))
+      (home-page "https://mapnik.org/")
+      (synopsis "Toolkit for developing mapping applications")
+      (description "Mapnik is a toolkit for developing mapping applications.  It
 is basically a collection of geographic objects like maps, layers,
 datasources, features, and geometries.  At its core is a C++ shared library
 providing algorithms and patterns for spatial data access and visualization.
@@ -770,15 +906,15 @@ The library does not rely on any specific windowing system and can be deployed
 to any server environment.  It is intended to play fair in a multi-threaded
 environment and is aimed primarily, but not exclusively, at web-based
 development.")
-    (license (list license:lgpl2.1+
-                   ;; demo/viewer, demo/python/rundemo.py
-                   license:gpl2+
-                   ;; deps/boost, deps/mapbox, deps/agg/include/agg_conv_offset.h
-                   license:boost1.0
-                   ;; deps/mapnik/sparsehash
-                   license:bsd-3
-                   ;; deps/agg
-                   (license:non-copyleft "file://deps/agg/copying")))))
+      (license (list license:lgpl2.1+
+                     ;; demo/viewer, demo/python/rundemo.py
+                     license:gpl2+
+                     ;; deps/boost, deps/mapbox, deps/agg/include/agg_conv_offset.h
+                     license:boost1.0
+                     ;; deps/mapnik/sparsehash
+                     license:bsd-3
+                     ;; deps/agg
+                     (license:non-copyleft "file://deps/agg/copying"))))))
 
 (define-public spatialite-gui
   (package
@@ -835,7 +971,7 @@ development.")
 (define-public gdal
   (package
     (name "gdal")
-    (version "3.3.3")
+    (version "3.5.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -843,7 +979,7 @@ development.")
                      version ".tar.gz"))
               (sha256
                (base32
-                "0nk09lws1hk873yn5f4wzqfvr82gm4hw3gq8w9g1h0kvf6j5x4i8"))
+                "1l93q7xf6qx9ck5axfkf3ygmvclxkvrjd8x00ckn7j0d0750ci3w"))
               (modules '((guix build utils)))
               (snippet
                 `(begin
@@ -858,36 +994,15 @@ development.")
                        "frmts/gtiff/libgeotiff"
                        "frmts/zlib"
                        "ogr/ogrsf_frmts/geojson/libjson"))))))
-    (build-system gnu-build-system)
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f
        #:configure-flags
-       (let-syntax ((with (syntax-rules ()
-                            ((_ option input)
-                             (string-append option "="
-                                            (assoc-ref %build-inputs input))))))
-         (list
-           ;; TODO: --with-pcidsk, --with-pcraster
-           (with "--with-freexl" "freexl")
-           (with "--with-libjson-c" "json-c")
-           (with "--with-png" "libpng")
-           (with "--with-webp" "libwebp")
-           (with "--with-gif" "giflib")
-           (with "--with-jpeg" "libjpeg-turbo")
-           (with "--with-libtiff" "libtiff")
-           (with "--with-geotiff" "libgeotiff")
-           (with "--with-libz" "zlib")
-           (with "--with-expat" "expat")
-           (with "--with-sqlite3" "sqlite")
-           "--with-pcre"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'fix-path
-           (lambda _
-             (substitute* "frmts/mrf/mrf_band.cpp"
-               (("\"../zlib/zlib.h\"") "<zlib.h>")))))))
+       (list "-DGDAL_USE_INTERNAL_LIBS=WHEN_NO_EXTERNAL"
+             "-DGDAL_USE_JPEG12_INTERNAL=OFF")))
     (inputs
-     (list expat
+     (list curl
+           expat
            freexl
            geos
            giflib
@@ -898,9 +1013,11 @@ development.")
            libtiff
            libwebp
            netcdf
-           pcre
+           openssl
+           pcre2
            postgresql ; libpq
            proj
+           qhull
            sqlite
            zlib))
     (native-inputs
@@ -986,13 +1103,13 @@ utilities for data translation and processing.")
   (package
     (name "python-cartopy")
     ;; This is a post-release fix that adds build_ext to setup.py.
-    (version "0.19.0.post1")
+    (version "0.20.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Cartopy" version))
        (sha256
-        (base32 "0xnm8z3as3hriivdfd26s6vn5b63gb46x6vxw6gh1mwfm5rlg2sb"))))
+        (base32 "01lhnkhw22jp6hnrs5qvgkq4fqcni2sx7ydiyv8w8xxx5wpglq0d"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1010,11 +1127,16 @@ utilities for data translation and processing.")
      (list python-matplotlib
            python-numpy
            python-pykdtree
+           python-pyproj
            python-pyshp
            python-scipy
            python-shapely))
     (inputs
-     (list geos proj))
+     (list geos
+           ;; cartopy's setup.py looks for the proj executable.
+           ;; Not sure if it actually makes use of it since it
+           ;; probably uses proj only through pyproj.
+           proj))
     (native-inputs
      (list python-cython python-flufl-lock python-pytest))
     (home-page "https://scitools.org.uk/cartopy/docs/latest/")
@@ -1038,14 +1160,14 @@ Shapely capabilities
 (define-public postgis
   (package
     (name "postgis")
-    (version "3.2.0")
+    (version "3.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.osgeo.org/postgis/source/postgis-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1zbwa15rsvr05rmcidk21q3amndd0q4df4psp3zhqz4lqraf3fbs"))))
+                "0gl9d6xy2an82ldb9sixz5blyngjryq8m3509fr38ffawvfniazv"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
@@ -1068,6 +1190,7 @@ Shapely capabilities
            json-c
            libjpeg-turbo
            libxml2
+           openssl
            pcre
            postgresql
            protobuf-c
@@ -1172,7 +1295,7 @@ to create databases that are optimized for rendering/tile/map-services.")
 (define-public libosmium
   (package
     (name "libosmium")
-    (version "2.17.2")
+    (version "2.18.0")
     (source
      (origin
        (method git-fetch)
@@ -1181,7 +1304,7 @@ to create databases that are optimized for rendering/tile/map-services.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0xgwicnzlyr8pcpgx528xrzh7g6rjfd7f80bi30478fnp8mq8rzr"))))
+        (base32 "0fh57mpii1ksacwfx5rz213j896aklib53jbybld2i517q2mmxr0"))))
     (build-system cmake-build-system)
     (propagated-inputs
      (list boost
@@ -1203,10 +1326,39 @@ to create databases that are optimized for rendering/tile/map-services.")
 OpenStreetMap data.")
     (license license:boost1.0)))
 
+(define-public osmium-tool
+  (package
+    (name "osmium-tool")
+    (version "1.14.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/osmcode/osmium-tool")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0zgyqyrs89vch0qnkh9m5xq079sr2wmydy5zz4l8xbysbjf6xry5"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Remove bundled libraries.
+        '(delete-file-recursively "include/rapidjson"))))
+    (build-system cmake-build-system)
+    (inputs
+     (list libosmium
+           rapidjson))
+    (native-inputs
+     (list pandoc))
+    (home-page "https://osmcode.org/osmium-tool/")
+    (synopsis "Osmium command-line tool")
+    (description "Command line tool for working with OpenStreetMap data
+based on the Osmium library.")
+    (license license:gpl3+)))
+
 (define-public osm2pgsql
   (package
     (name "osm2pgsql")
-    (version "1.5.1")
+    (version "1.7.0")
     (source
      (origin
        (method git-fetch)
@@ -1215,32 +1367,30 @@ OpenStreetMap data.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0i18mskcs087dn3f3h9n7j0wafn8502m0h13mrjwin38xsz0crfj"))
+        (base32 "15fxr4xq7siy237763l7nswx7v0swr3qzs2h3zkjzgvajw4p6qii"))
        (modules '((guix build utils)))
        (snippet
-        '(begin
-           (delete-file-recursively "contrib/protozero")
-           (delete-file-recursively "contrib/libosmium")
-           #t))))
+        ;; Remove bundled libraries.
+        '(delete-file-recursively "contrib"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f; tests fail because we need to setup a database
        #:configure-flags
-       (list (string-append "-DOSMIUM_INCLUDE_DIR="
-                            (assoc-ref %build-inputs "libosmium")
-                            "/include")
-             (string-append "-DPROTOZERO_INCLUDE_DIR="
-                            (assoc-ref %build-inputs "protozero")
-                            "/include"))))
+       (list "-DEXTERNAL_LIBOSMIUM=ON"
+             "-DEXTERNAL_PROTOZERO=ON"
+             "-DEXTERNAL_FMT=ON"
+             "-DEXTERNAL_RAPIDJSON=ON")))
     (inputs
      (list boost
            bzip2
            expat
+           fmt
            libosmium
            lua
            postgresql
            proj
            protozero
+           rapidjson
            zlib))
     (native-inputs
      (list python python-psycopg2))
@@ -1379,14 +1529,14 @@ map display.  Downloads map data from a number of websites, including
                   (string-append "\"" font "/share/fonts/\"")))))))
        #:tests? #f)) ; no tests
     (native-inputs
-     (list qttools))
+     (list qttools-5))
     (inputs
      (list bzip2
            font-liberation
            libnova
            libpng
            openjpeg
-           proj
+           proj-7
            qtbase-5
            zlib))
     (native-search-paths
@@ -1443,27 +1593,28 @@ persisted.
 (define-public python-rtree
   (package
     (name "python-rtree")
-    (version "0.9.7")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Rtree" version))
        (sha256
-        (base32 "0gna530vy6rh76035cqh7i2lx199cvxjrzjczg9rm6k96k5751xy"))))
+        (base32 "10lnhf67c9pb0yisxdqmb52dy6lj1za1h9d4p69v0ihk2a138j6h"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'find-libspatialindex
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "SPATIALINDEX_C_LIBRARY"
-                     (string-append (assoc-ref inputs "libspatialindex")
-                                    "/lib/libspatialindex.so"))))
+             (let ((libspatialindex (assoc-ref inputs "libspatialindex")))
+               (substitute* "rtree/finder.py"
+                 (("find_library\\(\"spatialindex_c\"\\)")
+                  (string-append  "\"" libspatialindex
+                                  "/lib/libspatialindex_c.so\""))))))
          (replace 'check
-           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+           (lambda* (#:key outputs tests? #:allow-other-keys)
              (when tests?
-               (add-installed-pythonpath inputs outputs)
-               (invoke "python" "-m" "pytest")))))))
+                 (invoke "pytest")))))))
     (native-inputs
      (list python-numpy python-pytest python-wheel))
     (inputs
@@ -1711,7 +1862,7 @@ ways, and relations) and their metadata tags.")
 (define-public libmaxminddb
   (package
     (name "libmaxminddb")
-    (version "1.4.3")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
@@ -1719,7 +1870,7 @@ ways, and relations) and their metadata tags.")
                            "/releases/download/" version "/"
                            "/libmaxminddb-" version ".tar.gz"))
        (sha256
-        (base32 "0fd4a4sxiiwzbd5h74wl1ijnb7xybjyybb7q41vdq3w8nk3zdzd5"))))
+        (base32 "0rw2z7rx8jzgdcgqlmc4wqrsjmiwd8vm5wvvrldy472rghcaq83n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -1738,14 +1889,14 @@ associated with an address.")
 (define-public python-maxminddb
   (package
     (name "python-maxminddb")
-    (version "1.5.1")
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "maxminddb" version))
        (sha256
         (base32
-         "0y9giw81k4wdmpryr4k42w50z292mf364a6vs1vxf83ksc9ig6j4"))))
+         "1rc4a403r3b4vhmhb03gidd0fmsbvfpbf3qfcw25h4db9zn0fxz3"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f)) ;; Tests require a copy of the maxmind database
@@ -1835,16 +1986,17 @@ using the dataset of topographical information collected by
         (base32 "184fqmsfzr3b333ssizjk6gvv7mncmygq8dj5r7rsvs5md26z2ys"))))
     (build-system qt-build-system)
     (native-inputs
-     (list pkg-config qttools))
+     (list pkg-config qttools-5))
     (inputs
-     (list gdal
+     (list curl
+           gdal
            libjpeg-turbo
            proj
            qtbase-5
-           qtdeclarative
+           qtdeclarative-5
            qtlocation
-           qtwebchannel
-           qtwebengine
+           qtwebchannel-5
+           qtwebengine-5
            quazip
            routino
            sqlite ; See wrap phase
@@ -1976,30 +2128,35 @@ exchanged form one Spatial DBMS and the other.")
 (define-public opencpn
   (package
     (name "opencpn")
-    (version "5.2.4")
+    (version "5.6.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/OpenCPN/OpenCPN")
-             (commit (string-append "v" version))))
+             (commit (string-append "Release_" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ffx0lmz1mp5433zqyxigy4qqav32xprpagd66krvihkyvqp2y6y"))))
+        (base32 "0g5x45wv3djfjmigk6kgs0i63yp8rs1fbmm4pb15wb3z6dml624y"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     (list bzip2
+     (list alsa-utils
+           bzip2
            cairo
            curl
+           eudev
            glu
            gtk+
+           jasper
            libarchive
            libelf
            libexif
+           libjpeg-turbo
            libsndfile
+           libusb
            lz4
            mesa
            pango
@@ -2068,6 +2225,7 @@ track your position right from your laptop.")
     (inputs
      `(("clipper" ,clipper)
        ("cups" ,cups)
+       ("curl" ,curl)
        ("gdal" ,gdal)
        ("proj" ,proj)
        ("qtbase" ,qtbase-5)
@@ -2077,7 +2235,7 @@ track your position right from your laptop.")
        ("zlib" ,zlib)))
     (native-inputs
      `(("doxygen" ,doxygen)
-       ("qttools" ,qttools)))
+       ("qttools-5" ,qttools-5)))
     (home-page "https://www.openorienteering.org/apps/mapper/")
     (synopsis "OpenOrienteering Mapper (OOM)")
     (description
@@ -2086,7 +2244,7 @@ orienteering sport.")
     (license license:gpl3+)))
 
 (define-public grass
-  (let* ((version "7.8.6")
+  (let* ((version "7.8.7")
          (majorminor (string-join (list-head (string-split version #\.) 2) ""))
          (grassxx (string-append "grass" majorminor)))
     (package
@@ -2098,7 +2256,7 @@ orienteering sport.")
          (uri (string-append "https://grass.osgeo.org/" grassxx
                              "/source/grass-" version ".tar.gz"))
          (sha256
-          (base32 "1glk74ly3j0x8ymn4jp73s6y8qv7p3g5nv4gvb6l9qqplyq1fpnq"))))
+          (base32 "0sbz0ba9p963phvd0gmvfqq1fg4ixpipzcjbf20ys86qavjppzsg"))))
       (build-system gnu-build-system)
       (inputs
        `(("bzip2" ,bzip2)
@@ -2209,7 +2367,7 @@ visualization.")
 (define-public saga
   (package
     (name "saga")
-    (version "7.9.0")
+    (version "8.2.1")
     (source
      (origin
        (method url-fetch)
@@ -2217,8 +2375,15 @@ visualization.")
                            (version-major version) "/SAGA%20-%20" version
                            "/saga-" version ".tar.gz"))
        (sha256
-        (base32 "1n051yxxkylly0k9rlkx2ih3j2lf9d4csg00sm7161r7nhjvggd1"))))
-    (build-system gnu-build-system)
+        (base32 "008izjs6gvj09abxf16ssl1xy0ay3ljq4jswbggp6wiiq459minv"))
+       (modules '((guix build utils)))
+       (snippet
+        '(substitute* "saga-gis/src/tools/docs/docs_pdf/doc_pdf.cpp"
+           (("^#include <hpdf\\.h>\n" all)
+            (string-append all "#include <hpdf_version.h>\n"))
+           (("\\bHPDF_PROJECTING_SCUARE_END\\b")
+            "HPDF_PROJECTING_SQUARE_END")))))
+    (build-system cmake-build-system)
     (native-inputs
      (list pkg-config swig))
     (inputs
@@ -2238,7 +2403,12 @@ visualization.")
            vigra
            wxwidgets))
     (arguments
-     '(#:configure-flags '("--enable-python")))
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'cd-to-source-dir
+           (lambda _
+             (chdir "saga-gis"))))))
     (synopsis "System for Automated Geoscientific Analyses")
     (description
      "SAGA (System for Automated Geoscientific Analyses) is a Geographic
@@ -2251,14 +2421,14 @@ growing set of geoscientific methods.")
 (define-public qgis
   (package
     (name "qgis")
-    (version "3.16.3")
+    (version "3.26.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://qgis.org/downloads/qgis-"
                            version ".tar.bz2"))
        (sha256
-        (base32 "012dv8dcg7w4lf6k37i41wialwhi0kpkxw2dnq19yqqk35632mzx"))))
+        (base32 "1hsq3wchsf7db7134fgg9xzzap35q1s4r6649d0krbw80xw5asca"))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules ((guix build cmake-build-system)
@@ -2268,6 +2438,8 @@ growing set of geoscientific methods.")
        #:imported-modules (,@%cmake-build-system-modules
                            (guix build python-build-system)
                            (guix build qt-utils))
+       #:configure-flags
+       '("-DWITH_QTWEBKIT=NO")
        #:phases
        (modify-phases %standard-phases
          ;; Configure correct path to PyQt5 SIP directory
@@ -2277,7 +2449,7 @@ growing set of geoscientific methods.")
                (("sip_dir = cfg.default_sip_dir")
                 (string-append "sip_dir = \""
                                (assoc-ref inputs "python-pyqt+qscintilla")
-                               "/share/sip\""))
+                               "/share/sip\"")))
                ;; Fix building with python-sip@5.
                ;;
                ;; The reason for this is that python-sip@5 introduces some
@@ -2288,33 +2460,18 @@ growing set of geoscientific methods.")
                ;; are, messing up the build. The long term solution is to fully
                ;; upgrade SIP, use sip-build and fix all failing packages, but
                ;; for now I just want to get the build working.
-               ((".pyqt_sip_dir...os.path.join.*,")
-                (string-append "'pyqt_sip_dir': \""
+             (substitute* "cmake/FindPyQt5.cmake"
+               (("SET\\(PYQT5_SIP_DIR \"\\$\\{Python_SITEARCH\\}/PyQt5/bindings\"\\)")
+                (string-append "SET(PYQT5_SIP_DIR \""
                                (assoc-ref inputs "python-pyqt+qscintilla")
-                               "/share/sip"  "\",")))
-             (substitute* (list "scripts/prepare_commit.sh"
-                                "scripts/qstringfixup.sh"
-                                "scripts/release.pl"
-                                "scripts/runtests_local_travis_config.sh"
-                                "scripts/sip_include.sh"
-                                "scripts/sipdiff"
-                                "scripts/sipify_all.sh"
-                                "scripts/spell_check/check_spelling.sh"
-                                "scripts/spell_check/spell_test.sh"
-                                "scripts/verify_indentation.sh"
-                                "tests/code_layout/test_banned_keywords.sh"
-                                "tests/code_layout/test_licenses.sh"
-                                "tests/code_layout/test_shellcheck.sh"
-                                "tests/code_layout/test_sip_include.sh"
-                                "tests/code_layout/test_sipfiles.sh"
-                                "tests/code_layout/test_sipify.sh")
+                               "/share/sip\")")))
+             (substitute* (list "tests/code_layout/test_qt_imports.sh"
+                                "tests/code_layout/test_qgsscrollarea.sh")
                (("\\$\\(git rev-parse --show-toplevel\\)")
-                (getcwd)))
-             (substitute* "tests/code_layout/test_sip_include.sh"
-               (("^REV=.*") "REV=currentrev\n"))
-             #t))
+                (getcwd)))))
          (replace 'check
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda* (#:key inputs tests? #:allow-other-keys)
+             (when tests?
              (setenv "HOME" "/tmp")
              (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
@@ -2325,104 +2482,87 @@ growing set of geoscientific methods.")
                            '(;; Disable tests that require network access
                              "qgis_filedownloader"
                              ;; TODO: Find why the following tests fail
-                             "ProcessingGdalAlgorithmsRasterTest"
-                             "ProcessingGdalAlgorithmsVectorTest"
-                             "ProcessingGrass7AlgorithmsImageryTest"
-                             "ProcessingGrass7AlgorithmsRasterTest"
-                             "ProcessingGrass7AlgorithmsVectorTest"
-                             "ProcessingOtbAlgorithmsTest"
                              "ProcessingQgisAlgorithmsTestPt1"
                              "ProcessingQgisAlgorithmsTestPt2"
                              "ProcessingQgisAlgorithmsTestPt3"
                              "ProcessingQgisAlgorithmsTestPt4"
-                             "PyCoreAdittions"
+                             "ProcessingGdalAlgorithmsVectorTest"
+                             "ProcessingGrass7AlgorithmsImageryTest"
+                             "ProcessingGrass7AlgorithmsRasterTestPt1"
+                             "ProcessingGrass7AlgorithmsRasterTestPt2"
+                             "ProcessingGrass7AlgorithmsVectorTest"
+                             "ProcessingOtbAlgorithmsTest"
+                             "test_core_authmanager"
+                             "test_core_compositionconverter"
+                             "test_core_coordinatereferencesystem"
+                             "test_core_gdalutils"
+                             "test_core_labelingengine"
+                             "test_core_layout"
+                             "test_core_layouthtml"
+                             "test_core_layoutlabel"
+                             "test_core_layoutmultiframe"
+                             "test_core_layoutpicture"
+                             "test_core_legendrenderer"
+                             "test_core_networkaccessmanager"
+                             "test_core_rasterfilewriter"
+                             "test_core_tiledownloadmanager"
+                             "test_gui_dualview"
+                             "test_gui_htmlwidgetwrapper"
+                             "test_gui_filedownloader"
+                             "test_gui_queryresultwidget"
+                             "test_analysis_processingalgspt2"
+                             "test_analysis_processing"
+                             "test_provider_wcsprovider"
+                             "qgis_grassprovidertest7"
+                             "test_app_gpsinformationwidget"
                              "PyQgsAnnotation"
-                             "PyQgsAppStartup"
-                             "PyQgsAuthBasicMethod"
+                             "PyQgsAttributeTableModel"
                              "PyQgsAuthenticationSystem"
-                             "PyQgsAuxiliaryStorage"
-                             "PyQgsDBManagerGpkg"
-                             "PyQgsDBManagerSpatialite"
-                             "PyQgsDataItem"
-                             "PyQgsFieldValidator"
+                             "PyQgsExternalStorageWebDAV"
+                             "PyQgsFieldFormattersTest"
                              "PyQgsFileUtils"
                              "PyQgsGeometryTest"
-                             "PyQgsImageCache"
-                             "PyQgsImportIntoPostGIS"
-                             "PyQgsLayerDependencies"
-                             "PyQgsLayerMetadata"
-                             "PyQgsLayout"
+                             "PyQgsGoogleMapsGeocoder"
+                             "PyQgsHashLineSymbolLayer"
                              "PyQgsLayoutExporter"
                              "PyQgsLayoutHtml"
-                             "PyQgsLayoutLegend"
-                             "PyQgsLayoutMapGrid"
+                             "PyQgsLineSymbolLayers"
                              "PyQgsMapLayer"
-                             "PyQgsMetadataBase"
-                             "PyQgsOGRProvider"
+                             "PyQgsNetworkContentFetcherRegistry"
                              "PyQgsOGRProviderGpkg"
-                             "PyQgsOapifProvider"
+                             "PyQgsOGRProviderSqlite"
+                             "PyQgsPalLabelingCanvas"
                              "PyQgsPalLabelingLayout"
-                             "PyQgsProject"
+                             "PyQgsPalLabelingPlacement"
+                             "PyQgsProcessExecutable"
                              "PyQgsProviderConnectionGpkg"
-                             "PyQgsProviderConnectionPostgres"
                              "PyQgsProviderConnectionSpatialite"
-                             "PyQgsPythonProvider"
-                             "PyQgsRasterLayer"
-                             "PyQgsRulebasedRenderer"
-                             "PyQgsSelectiveMasking"
-                             "PyQgsSettings"
-                             "PyQgsShapefileProvider"
+                             "PyQgsOGRProvider"
                              "PyQgsSpatialiteProvider"
-                             "PyQgsSvgCache"
-                             "PyQgsSymbolExpressionVariables"
-                             "PyQgsTextRenderer"
                              "PyQgsVectorFileWriter"
-                             "PyQgsVectorLayer"
-                             "PyQgsVectorLayerUtils"
+                             "PyQgsVectorLayerEditBuffer"
+                             "PyQgsVectorLayerEditBufferGroup"
+                             "PyQgsVectorLayerProfileGenerator"
                              "PyQgsVirtualLayerProvider"
                              "PyQgsWFSProvider"
-                             "qgis_arcgisrestutilstest"
-                             "qgis_authmanagertest"
-                             "qgis_compositionconvertertest"
-                             "qgis_coordinatereferencesystemtest"
-                             "qgis_expressiontest"
-                             "qgis_fontmarkertest"
-                             "qgis_geometrycheckstest"
-                             "qgis_geometrytest"
-                             "qgis_gpsinformationwidget"
-                             "qgis_grassprovidertest7"
-                             "qgis_imagecachetest"
-                             "qgis_labelingenginetest"
-                             "qgis_layouthtmltest"
-                             "qgis_layoutmanualtabletest"
-                             "qgis_layoutmapgridtest"
-                             "qgis_layoutmaptest"
-                             "qgis_layoutpicturetest"
-                             "qgis_layouttabletest"
-                             "qgis_mapdevicepixelratiotest"
-                             "qgis_maprendererjobtest"
-                             "qgis_ogrproviderguitest"
-                             "qgis_painteffecttest"
-                             "qgis_pallabelingtest"
-                             "qgis_processingtest"
-                             "qgis_rasterlayertest"
+                             "PyQgsWFSProviderGUI"
+                             "PyQgsOapifProvider"
+                             "PyQgsLayerDependencies"
+                             "PyQgsDBManagerGpkg"
+                             "PyQgsDBManagerSpatialite"
+                             "PyQgsAuxiliaryStorage"
+                             "PyQgsSelectiveMasking"
                              "qgis_shellcheck"
-                             "qgis_sip_include"
-                             "qgis_sip_uptodate"
                              "qgis_sipify"
-                             "qgis_styletest"
-                             "qgis_svgmarkertest"
-                             "qgis_taskmanagertest"
-                             "qgis_wcsprovidertest"
-                             "qgis_ziplayertest")
-                           "|"))))
+                             "qgis_sip_include"
+                             "qgis_sip_uptodate")
+                           "|")))))
          (add-after 'install 'wrap-python
            (assoc-ref python:%standard-phases 'wrap))
          (add-after 'wrap-python 'wrap-qt
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (wrap-qt-program "qgis" #:output out #:inputs inputs))
-             #t))
+               (wrap-qt-program "qgis" #:output out #:inputs inputs))))
          (add-after 'wrap-qt 'wrap-gis
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; TODO: Find if there is a way to get SAGA to work.
@@ -2440,10 +2580,10 @@ growing set of geoscientific methods.")
                (wrap-program (string-append out "/bin/qgis")
                  ;;`("PATH" ":" prefix (,saga))
                  `("QGIS_PREFIX_PATH" = (,out))
-                 `("GISBASE" = (,grass))))
-             #t)))))
+                 `("GISBASE" = (,grass)))))))))
     (inputs
-     (list exiv2
+     (list bash-minimal
+           exiv2
            expat
            gdal
            geos
@@ -2479,15 +2619,15 @@ growing set of geoscientific methods.")
            qca
            qscintilla
            qtbase-5
-           qtdeclarative
+           qtdeclarative-5
            qtkeychain
            qtlocation
            qtserialport
-           qtsvg
-           qtwebkit
+           qtsvg-5
            qwt
-           ;;("saga" ,saga)
-           sqlite))
+           ;; saga
+           sqlite
+           (list zstd "lib")))
     (native-inputs
      (list bison
            flex
@@ -2496,7 +2636,8 @@ growing set of geoscientific methods.")
            pkg-config
            python-mock
            python-nose2
-           qttools
+           python-pyqt-builder
+           qttools-5
            shellcheck
            xorg-server-for-tests))
     (home-page "https://qgis.org")
@@ -2596,35 +2737,41 @@ using third-party geocoders and other data sources.")
 (define-public gplates
   (package
     (name "gplates")
-    (version "2.3.0")
+    ;; Note: use a pre-release to cope with newer Boost, ref
+    ;; https://discourse.gplates.org/t/compilation-error-with-boost-1-77/452/3
+    (version "2.3.01-beta.3")
     (source (origin
               (method url-fetch)
-              (uri "https://www.earthbyte.org/download/8421/")
-              (file-name (string-append name "-" version ".tar.bz2"))
+              (uri "https://cloudstor.aarnet.edu.au/plus/s\
+/ojsYNOyUYE3evNp/download?path=%2F&files=gplates_2.3.1-beta.3_src.zip")
+              (file-name (string-append name "-" version ".zip"))
               (sha256
                (base32
-                "0lrcmcxc924ixddii8cyglqlwwxvk7f00g4yzbss5i3fgcbh8n96"))))
+                "06i87dfab0cq9gdi5mh6sf9wigawpp0d05zbyslv910443i26gwv"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DBoost_NO_BOOST_CMAKE=ON")
-       #:tests? #f)) ;no test target
+       #:tests? #f))                    ;no test target
+    (native-inputs
+     (list unzip))                      ;for the beta
     (inputs
-     `(("boost" ,boost)
-       ("cgal" ,cgal)
-       ("gdal" ,gdal)
-       ("glew" ,glew)
-       ("glu" ,glu)
-       ("gmp" ,gmp)
-       ("mesa" ,mesa)
-       ("mpfr" ,mpfr)
-       ("proj" ,proj)
-       ("python-3" ,python-3)
-       ("python-numpy" ,python-numpy)
-       ("qt" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("qwt" ,qwt)
-       ("zlib" ,zlib)))
+     (list boost
+           cgal
+           curl
+           gdal
+           glew
+           glu
+           gmp
+           mesa
+           mpfr
+           proj
+           python-3
+           python-numpy
+           qtbase-5
+           qtsvg-5
+           qtxmlpatterns
+           qwt
+           zlib))
     (home-page "https://www.gplates.org")
     (synopsis "Plate tectonics simulation program")
     (description "GPlates is a plate tectonics program.  Manipulate