gnu: Add java-opening-hours-parser.
[jackhill/guix/guix.git] / gnu / packages / geo.scm
index 477e9a4..cae7f2d 100644 (file)
@@ -4,12 +4,14 @@
 ;;; Copyright © 2017, 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
-;;; Copyright © 2018, 2019 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2018, 2019, 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
+;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,6 +36,7 @@
   #:use-module (guix build-system go)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system qt)
   #:use-module (guix build-system scons)
   #:use-module (guix build-system r)
   #:use-module (guix download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
   #:use-module (gnu packages astronomy)
+  #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages backup)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gps)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages haskell-apps)
   #: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 lua)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages pcre)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages swig)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages textutils)
+  #:use-module (gnu packages time)
   #:use-module (gnu packages web)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages wxwidgets)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg))
 
 (define-public geos
   (package
     (name "geos")
-    (version "3.7.1")
+    (version "3.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.osgeo.org/geos/geos-"
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1312m02xk4sp6f1xdpb9w0ic0zbxg90p5y66qnwidl5fksscf1h0"))))
+                "1mb2v9fy1gnbjhcgv0xny11ggfb17vkzsajdyibigwsxr4ylq4cr"))))
     (build-system gnu-build-system)
     (arguments `(#:phases
                  (modify-phases %standard-phases
@@ -112,7 +140,7 @@ topology functions.")
 (define-public gnome-maps
   (package
     (name "gnome-maps")
-    (version "3.30.3.1")
+    (version "3.34.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -120,7 +148,7 @@ topology functions.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0xqk3yrds0w8bjmpf4jw0370phvm65av82nqrx7fp1648h9nq7xi"))))
+                "00xslcnhhwslqglgfv2im7vq3awa49y2jxzr8wsby7f713k28vf5"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -161,11 +189,12 @@ topology functions.")
                                                  ,geocode-glib-path)))
                #t))))))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
+     `(("gettext" ,gettext-minimal)
+       ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("folks" ,folks)
+     `(("evolution-data-server" ,evolution-data-server)
+       ("folks" ,folks)
        ("libchamplain" ,libchamplain)
        ("libgee" ,libgee)
        ("libsecret" ,libsecret)
@@ -181,10 +210,9 @@ topology functions.")
        ("glib" ,glib)
        ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gtk+" ,gtk+)
        ("rest" ,rest)
        ("webkitgtk" ,webkitgtk)))
-    (propagated-inputs
-     `(("gtk+3" ,gtk+)))
     (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,
@@ -225,37 +253,37 @@ and driving.")
 (define-public libgeotiff
   (package
     (name "libgeotiff")
-    (version "1.4.3")
+    (version "1.5.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 "0rbjqixi4c8yz19larlzq6jda0px2gpmpp9c52cyhplbjsdhsldq"))
+        (base32 "0b31mlzcv5b1y7jdvb7p0pa3xradrg3x5g32ym911lbhq4rrgsgr"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; Remove .csv files, distributed from EPSG under a restricted
            ;; license. See LICENSE for full license text.
            (for-each delete-file (find-files "." "\\.csv$"))
-           ;; Now that we have removed the csv files, we need to modify the Makefile.
-           (substitute* "Makefile.in"
-             (("^all-am: .*$")
-              "all-am: Makefile $(LTLIBRARIES) $(HEADERS) geo_config.h\n")
-             (("^install-data-am: .*$")
-              "install-data-am: install-includeHEADERS"))
            #t))))
     (build-system gnu-build-system)
     (inputs
      `(("libjpeg-turbo" ,libjpeg-turbo)
        ("libtiff" ,libtiff)
-       ("proj.4" ,proj.4)
        ("zlib" ,zlib)))
+    (propagated-inputs
+     `(;; libgeotiff headers include proj headers, so ensure those are available.
+       ("proj" ,proj)))
     (arguments
      `(#:configure-flags
-       (list (string-append "--with-zlib")
-             (string-append "--with-jpeg")
+       (list "--disable-static"
+             "--with-zlib" "--with-jpeg"
              (string-append "--with-libtiff=" (assoc-ref %build-inputs "libtiff")))))
     (synopsis "Library for handling GeoTIFF (geographic enabled TIFF)")
     (description "libgeotiff is a library on top of libtiff for reading and
@@ -319,6 +347,39 @@ fully fledged Spatial SQL capabilities.")
                    license:mpl1.1
                    license:public-domain))))
 
+(define-public proj
+  (package
+    (name "proj")
+    (version "6.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://download.osgeo.org/proj/proj-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1y46ij32j9b4x1kjnnlykcwk3kkjwkg44sfc1ziwm3a3g0ki3q3d"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("sqlite" ,sqlite)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "https://proj.org/")
+    (synopsis "Coordinate transformation software")
+    (description
+     "Proj is a generic coordinate transformation software that transforms
+geospatial coordinates from one coordinate reference system (CRS) to another.
+This includes cartographic projections as well as geodetic transformations.
+PROJ includes command line applications for easy conversion of coordinates
+from text files or directly from user input.  In addition, proj also exposes
+an application programming interface that lets developers use the
+functionality of proj in their own software.")
+    (license (list license:expat
+                   ;; src/projections/patterson.cpp
+                   license:asl2.0
+                   ;; src/geodesic.*, src/tests/geodtest.cpp
+                   license:x11))))
+
 (define-public proj.4
   (package
     (name "proj.4")
@@ -354,7 +415,7 @@ fully fledged Spatial SQL capabilities.")
              #t)))))
     (inputs
      `(("glib" ,glib)))
-    (home-page "http://proj4.org/")
+    (home-page "https://proj.org/")
     (synopsis "Cartographic Projections Library")
     (description
      "Proj.4 is a library for converting coordinates between cartographic
@@ -404,7 +465,7 @@ projections.")
        (list "CC=gcc"
              (string-append "PREFIX=" %output)
              (string-append "CUSTOM_LDFLAGS=-Wl,-rpath=" %output "/lib"))))
-    (home-page "http://mapnik.org/")
+    (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,
@@ -515,12 +576,21 @@ development.")
      `(("freexl" ,freexl)
        ("geos" ,geos)
        ("libgaiagraphics" ,libgaiagraphics)
+       ("libjpeg-turbo" ,libjpeg-turbo)
        ("libspatialite" ,libspatialite)
        ("libxml2" ,libxml2)
        ("proj.4" ,proj.4)
        ("sqlite" ,sqlite)
        ("wxwidgets" ,wxwidgets-2)
        ("zlib" ,zlib)))
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'fix-gui
+                    (lambda _
+                      ;; Fix for the GUI not showing up.
+                      (substitute* "Main.cpp"
+                        (("Hide\\(\\);") ""))
+                      #t)))))
     (synopsis "Graphical user interface for SpatiaLite")
     (description "Spatialite-gui provides a visual interface for viewing and
  maintaining a spatialite database.  You can easily see the structure of the
@@ -532,7 +602,7 @@ development.")
 (define-public gdal
   (package
     (name "gdal")
-    (version "2.2.4")
+    (version "3.0.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -540,7 +610,7 @@ development.")
                      version ".tar.gz"))
               (sha256
                (base32
-                "1951f7b69x3d1vic0rmq92q8f4bj3hbxnxmj5jl0cc3zg0isgmdr"))
+                "10symyajj1b7j98f889lqxxbmhcyvlhq9gg0l42h69bv22wx45gw"))
               (modules '((guix build utils)))
               (snippet
                 `(begin
@@ -574,6 +644,8 @@ development.")
            (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
@@ -582,7 +654,8 @@ development.")
              (substitute* "frmts/mrf/mrf_band.cpp"
                (("\"../zlib/zlib.h\"") "<zlib.h>")))))))
     (inputs
-     `(("freexl" ,freexl)
+     `(("expat" ,expat)
+       ("freexl" ,freexl)
        ("geos" ,geos)
        ("giflib" ,giflib)
        ("json-c" ,json-c)
@@ -591,9 +664,12 @@ development.")
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)
        ("libwebp" ,libwebp)
+       ("netcdf" ,netcdf)
        ("pcre" ,pcre)
+       ("proj" ,proj)
+       ("sqlite" ,sqlite)
        ("zlib" ,zlib)))
-    (home-page "http://www.gdal.org/")
+    (home-page "https://gdal.org/")
     (synopsis "Raster and vector geospatial data format library")
     (description "GDAL is a translator library for raster and vector geospatial
 data formats.  As a library, it presents a single raster abstract data model
@@ -643,14 +719,14 @@ utilities for data translation and processing.")
 (define-public postgis
   (package
     (name "postgis")
-    (version "2.4.8")
+    (version "3.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.osgeo.org/postgis/source/postgis-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0nanza15xzfhbpbq49p1xqz96dgbsam5332y9zj6snmz2mq685ll"))))
+                "15557fbk0xkngihwhqsbdyz2ng49blisf5zydw81j0gabk6x4vy0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
@@ -669,10 +745,13 @@ utilities for data translation and processing.")
     (inputs
      `(("gdal" ,gdal)
        ("geos" ,geos)
+       ("giflib" ,giflib)
+       ("json-c" ,json-c)
+       ("libjpeg" ,libjpeg-turbo)
        ("libxml2" ,libxml2)
        ("pcre" ,pcre)
        ("postgresql" ,postgresql)
-       ("proj.4" ,proj.4)))
+       ("proj" ,proj)))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)))
@@ -720,7 +799,7 @@ extension.")
                               "cmd/tegola_lambda/main.go")
                  (("version not set") ,version)))
              #t)))))
-    (home-page "http://tegola.io")
+    (home-page "https://tegola.io")
     (synopsis "Vector tile server for maps")
     (description "Tegola is a free vector tile server written in Go.  Tegola
 takes geospatial data and slices it into vector tiles that can be efficiently
@@ -775,7 +854,7 @@ to create databases that are optimized for rendering/tile/map-services.")
 (define-public libosmium
   (package
     (name "libosmium")
-    (version "2.14.2")
+    (version "2.15.4")
     (source
      (origin
        (method git-fetch)
@@ -784,16 +863,18 @@ 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 "123ri1l0a2b9fljgpwsl7z2w4i3kmgxz79d4ns9z4mwbp8sw0250"))))
+        (base32 "0mlcvqrhp40bzj5r5j9nfc5vbis8hmzcq9xi8jylkciyydaynhz4"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("boost" ,boost)
+       ("bzip2" ,bzip2)
        ("expat" ,expat)
        ("gdal" ,gdal)
        ("geos" ,geos)
-       ("proj.4" ,proj.4)
+       ("proj" ,proj)
        ("protozero" ,protozero)
        ("sparsehash" ,sparsehash)
+       ("utfcpp" ,utfcpp)
        ("zlib" ,zlib)))
     (native-inputs
      `(("doxygen" ,doxygen)))
@@ -806,7 +887,7 @@ OpenStreetMap data.")
 (define-public osm2pgsql
   (package
     (name "osm2pgsql")
-    (version "0.96.0")
+    (version "1.2.1")
     (source
      (origin
        (method git-fetch)
@@ -815,7 +896,7 @@ OpenStreetMap data.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "032cydh8ynaqfhdzmkvgbmqyjql668y6qln1l59l2s3ni9963bbl"))
+        (base32 "1ysan01lpqzjxlq3y2kdminfjs5d9zksicpf9vvzpdk3fzq51fc9"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -834,16 +915,17 @@ OpenStreetMap data.")
                             "/include"))))
     (inputs
      `(("boost" ,boost)
+       ("bzip2" ,bzip2)
        ("expat" ,expat)
        ("libosmium" ,libosmium)
        ("lua" ,lua)
        ("postgresql" ,postgresql)
-       ("proj.4" ,proj.4)
+       ("proj" ,proj)
        ("protozero" ,protozero)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("python-2" ,python-2)
-       ("python2-psycopg2" ,python2-psycopg2)))
+     `(("python" ,python)
+       ("python-psycopg2" ,python-psycopg2)))
     (home-page "https://github.com/openstreetmap/osm2pgsql")
     (synopsis "OSM data importer to postgresql")
     (description "Osm2pgsql is a tool for loading OpenStreetMap data into a
@@ -1010,16 +1092,17 @@ volunteers.")
 (define-public libspatialindex
   (package
     (name "libspatialindex")
-    (version "1.8.5")
+    (version "1.9.3")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://download.osgeo.org/libspatialindex/"
-                           "spatialindex-src-" version ".tar.gz"))
+       (uri (string-append "https://github.com/libspatialindex/libspatialindex/"
+                           "releases/download/" version "/spatialindex-src-"
+                           version ".tar.bz2"))
        (sha256
         (base32
-         "1vxzm7kczwnb6qdmc0hb00z8ykx11zk3sb68gc7rch4vrfi4dakw"))))
-    (build-system gnu-build-system)
+         "02n5vjcyk04w0djidyp21hfbxfpbbara8ifd9nml6158rwqr8lja"))))
+    (build-system cmake-build-system)
     (home-page "https://libspatialindex.org")
     (synopsis "Spatial indexing library")
     (description "The purpose of this library is to provide:
@@ -1044,7 +1127,7 @@ persisted.
 (define-public java-jmapviewer
   (package
     (name "java-jmapviewer")
-    (version "2.12")
+    (version "2.13")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://svn.openstreetmap.org/applications/"
@@ -1052,7 +1135,7 @@ persisted.
                                   "/JMapViewer-" version "-Source.zip"))
               (sha256
                (base32
-                "08hbqsbs859v4m5d90560fdifavd1apnpz9v9iry1v31dsvy5707"))))
+                "0sy6r5fkbb9bclw0is6gwnbzz627m7pjfnsqydxz58pbndakkhrv"))))
     (build-system ant-build-system)
     (native-inputs
      `(("unzip" ,unzip)))
@@ -1068,18 +1151,64 @@ persisted.
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((dir (string-append (assoc-ref outputs "out") "/share/java/")))
                (mkdir-p dir)
-               (copy-file "JMapViewer.jar" (string-append dir "JMapViewer.jar"))))))))
+               (copy-file "JMapViewer.jar" (string-append dir "JMapViewer.jar"))
+               #t))))))
     (home-page "https://wiki.openstreetmap.org/wiki/JMapViewer")
     (synopsis "OSM map integration in Java")
-    (description "JMapViewer is a Java component which allows to easily
-integrate an OSM map view into your Java application.  It is maintained as
+    (description "JMapViewer is a Java component which easily
+integrates an OSM map view into your Java application.  It is maintained as
 an independent project by the JOSM team.")
     (license license:gpl2)))
 
+(define-public java-opening-hours-parser
+  (package
+    (name "java-opening-hours-parser")
+    (version "0.21.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/simonpoole/OpeningHoursParser")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1m8sp0jbjyv1nq3ddj8rk6rf3sva3mkacc6vw7rsj0c2n57k3i50"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-opening-hours-parser.jar"
+       #:source-dir "src/main/java"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (add-before 'build 'generate-parser
+           (lambda* _
+             (let* ((dir "src/main/java/ch/poole/openinghoursparser")
+                    (file (string-append dir "/OpeningHoursParser.jj")))
+               (invoke "javacc" "-DEBUG_PARSER=false"
+                       "-DEBUG_TOKEN_MANAGER=false" "-JDK_VERSION=1.8"
+                       "-GRAMMAR_ENCODING=UTF-8"
+                       (string-append "-OUTPUT_DIRECTORY=" dir)
+                       file))
+             #t)))))
+    (inputs
+     `(("java-jetbrains-annotations" ,java-jetbrains-annotations)))
+    (native-inputs
+     `(("javacc" ,javacc)
+       ("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "https://github.com/simonpoole/OpeningHoursParser")
+    (synopsis "Java parser for the OpenStreetMap opening hour format")
+    (description "This is a very simplistic parser for string values according
+to the OSM opening hours specification.")
+    (license license:expat)))
+
 (define-public josm
   (package
     (name "josm")
-    (version "15492")
+    (version "15937")
     (source (origin
               (method svn-fetch)
               (uri (svn-reference
@@ -1088,7 +1217,7 @@ an independent project by the JOSM team.")
                      (recursive? #f)))
               (sha256
                (base32
-                "12xkwcv77as30a61w1c8a0i2b0kiiks71d487gbdfv7azlj4vqia"))
+                "00b8sw0wgkcf7xknmdpn5s521ax8x2660figidcrry37sgq3x946"))
               (file-name (string-append name "-" version "-checkout"))
               (modules '((guix build utils)))
             (snippet
@@ -1210,6 +1339,759 @@ an independent project by the JOSM team.")
     (synopsis "OSM editor")
     (description "JOSM is an extensible editor for OpenStreetMap (OSM).  It
 supports loading GPX tracks, background imagery and OSM data from local
-sources as well as from online sources and allows to edit the OSM data (nodes,
+sources as well as from online sources and allows editing the OSM data (nodes,
 ways, and relations) and their metadata tags.")
     (license license:gpl2+)))
+
+(define-public libmaxminddb
+  (package
+    (name "libmaxminddb")
+    (version "1.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/maxmind/libmaxminddb"
+                           "/releases/download/" version "/"
+                           "/libmaxminddb-" version ".tar.gz"))
+       (sha256
+        (base32 "0mnimbaxnnarlw7g1rh8lpxsyf7xnmzwcczcc3lxw8xyf6ljln6x"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-cc-to-gcc
+           (lambda _
+             (setenv "CC" "gcc"))))))
+    (native-inputs
+     `(("perl" ,perl)))
+    (home-page "https://maxmind.github.io/libmaxminddb/")
+    (synopsis "C library for the MaxMind DB file format")
+    (description "The libmaxminddb library provides a C library for reading
+MaxMind DB files, including the GeoIP2 databases from MaxMind.  The MaxMind DB
+format is a custom, but open, binary format designed to facilitate fast
+lookups of IP addresses while allowing flexibility in the type of data
+associated with an address.")
+    (license license:asl2.0)))
+
+(define-public python-maxminddb
+  (package
+    (name "python-maxminddb")
+    (version "1.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "maxminddb" version))
+       (sha256
+        (base32
+         "0y9giw81k4wdmpryr4k42w50z292mf364a6vs1vxf83ksc9ig6j4"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ;; Tests require a copy of the maxmind database
+    (inputs
+     `(("libmaxminddb" ,libmaxminddb)))
+    (home-page "https://www.maxmind.com/")
+    (synopsis "Reader for the MaxMind DB format")
+    (description "MaxMind DB is a binary file format that stores data indexed
+by IP address subnets (IPv4 or IPv6).  This is a Python module for reading
+MaxMind DB files.")
+    (license license:asl2.0)))
+
+(define-public python-geoip2
+  (package
+    (name "python-geoip2")
+    (version "2.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "geoip2" version))
+       (sha256
+        (base32
+         "1w7cay5q6zawjzivqbwz5cqx1qbdjw6kbriccb7l46p7b39fkzzp"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ;; Tests require a copy of the maxmind database
+    (inputs
+     `(("python-maxminddb" ,python-maxminddb)
+       ("python-requests" ,python-requests)))
+    (home-page "https://www.maxmind.com/")
+    (synopsis "MaxMind GeoIP2 API")
+    (description "Provides an API for the GeoIP2 web services and databases.
+The API also works with MaxMind’s free GeoLite2 databases.")
+    (license license:asl2.0)))
+
+(define-public routino
+  (package
+   (name "routino")
+   (version "3.3.2")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (string-append "http://www.routino.org/download/routino-"
+                         version ".tgz"))
+     (sha256
+      (base32
+       "1ccx3s99j8syxc1gqkzsaqkmyf44l7h3adildnc5iq2md7bp8wab"))))
+   (build-system gnu-build-system)
+   (native-inputs
+    `(("perl" ,perl)))
+   (inputs
+    `(("bzip2" ,bzip2)
+      ("xz" ,xz)
+      ("zlib" ,zlib)))
+   (arguments
+    `(#:test-target "test"
+      #:phases
+      (modify-phases %standard-phases
+        (replace 'configure
+          (lambda* (#:key outputs #:allow-other-keys)
+            (substitute* "Makefile.conf"
+              (("prefix=/usr/local")
+               (string-append "prefix=" (assoc-ref outputs "out")))
+              (("LDFLAGS_LDSO=-Wl,-R\\.")
+               "LDFLAGS_LDSO=-Wl,-R$(libdir)")
+              (("#CFLAGS\\+=-DUSE_XZ")
+               "CFLAGS+=-DUSE_XZ")
+              (("#LDFLAGS\\+=-llzma")
+               "LDFLAGS+=-llzma"))
+            #t)))))
+   (synopsis "Routing application for OpenStreetMap data")
+   (description
+    "Routino is an application for finding a route between two points
+using the dataset of topographical information collected by
+@url{https://www.OpenStreetMap.org}.")
+   (home-page "https://www.routino.org/")
+   (license license:agpl3+)))
+
+(define-public qmapshack
+  (package
+    (name "qmapshack")
+    (version "1.14.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Maproom/qmapshack.git")
+             (commit (string-append "V_" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "07c2hrq9sn456w7l3gdr599rmjfv2k6mh159zza7p1py8r7ywksa"))))
+    (build-system qt-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)))
+    (inputs
+     `(("gdal" ,gdal)
+       ("libjpeg-turbo" ,libjpeg-turbo)
+       ("proj" ,proj)
+       ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtlocation" ,qtlocation)
+       ("qtwebchannel" ,qtwebchannel)
+       ("qtwebengine" ,qtwebengine)
+       ("quazip" ,quazip)
+       ("routino" ,routino)
+       ("sqlite" ,sqlite)                      ; See wrap phase
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-cmake-modules
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               (("find_package\\(Qt5PrintSupport        REQUIRED\\)" all)
+                (string-append all "\nfind_package(Qt5Positioning REQUIRED)")))
+             (substitute* "cmake/Modules/FindROUTINO.cmake"
+               (("/usr/local")
+                (assoc-ref inputs "routino")))
+             ;; The following fixes are included as patches in the sources
+             ;; of QMapShack, but they are not applied by default, for
+             ;; some reason...
+             (invoke "patch" "-p1" "-i" "FindPROJ4.patch")
+             (invoke "patch" "-p1" "-i" "FindQuaZip5.patch")
+             #t))
+         (add-after 'install 'wrap
+           ;; The program fails to find the QtWebEngineProcess program,
+           ;; so we set QTWEBENGINEPROCESS_PATH to help it.
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
+                   (qtwebengineprocess (string-append
+                                        (assoc-ref inputs "qtwebengine")
+                                        "/lib/qt5/libexec/QtWebEngineProcess")))
+               (for-each (lambda (program)
+                           (wrap-program program
+                             `("QTWEBENGINEPROCESS_PATH" =
+                               (,qtwebengineprocess))))
+                         (find-files bin ".*")))
+             #t)))))
+    (synopsis "GPS mapping application")
+    (description
+     "QMapShack can be used to plan your next outdoor trip or to visualize and
+archive all the GPS recordings of your past trips.  It is the successor of the
+QLandkarte GT application.")
+    (home-page "https://github.com/Maproom/qmapshack/wiki")
+    (license license:gpl3+)))
+
+(define-public readosm
+  (package
+    (name "readosm")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.gaia-gis.it/gaia-sins/"
+                           "readosm-" version ".tar.gz"))
+       (sha256
+        (base32 "1v20pnda67imjd70fn0zw30aar525xicy3d3v49md5cvqklws265"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("expat" ,expat)
+       ("zlib" ,zlib)))
+    (synopsis "Data extractor for OpenStreetMap files")
+    (description
+     "ReadOSM is a library to extract valid data from within an OpenStreetMap
+input file (in @code{.osm} or @code{.osm.pbf} format).")
+    (home-page "https://www.gaia-gis.it/fossil/readosm/index")
+    (license (list license:gpl2+
+                   license:lgpl2.1+
+                   license:mpl1.1))))
+
+(define-public spatialite-tools
+  (package
+    (name "spatialite-tools")
+    (version "4.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.gaia-gis.it/gaia-sins/"
+                           "spatialite-tools-" version ".tar.gz"))
+       (sha256
+        (base32 "12fggjhi8cgwvw8f6nk76f83b8lqkc07abxyj5ap6f2gq2dqafgp"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("expat" ,expat)
+       ("freexl" ,freexl)
+       ("geos" ,geos)
+       ("libspatialite" ,libspatialite)
+       ("libxml2" ,libxml2)
+       ("proj.4" ,proj.4)
+       ("readosm" ,readosm)
+       ("sqlite" ,sqlite)
+       ("zlib" ,zlib)))
+    (synopsis "Collection of command line tools for SpatiaLite")
+    (description
+     "@code{spatialite-tools} is a collection of Command Line Interface (CLI)
+tools supporting SpatiaLite.")
+    (home-page "https://www.gaia-gis.it/fossil/spatialite-tools/index")
+    (license license:gpl3+)))
+
+(define-public virtualpg
+  (package
+    (name "virtualpg")
+    (version "1.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.gaia-gis.it/gaia-sins/"
+                           "virtualpg-" version ".tar.gz"))
+       (sha256
+        (base32 "0kjipcd08vvn188xmwbs7sw41xcs06x47n2hbqshpjcr51mxbarp"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("postgresql" ,postgresql)
+       ("sqlite" ,sqlite)))
+    (synopsis "Allow SQLite/SpatiaLite to access PostgreSQL/PostGIS tables")
+    (description
+     "VirtualPG is a dynamic extension for the SQLite DBMS.  It implements
+the VirtualPostgres driver, allowing to directly exchange data between SQLite
+and PostgreSQL; if SpatiaLite is available even PostGIS geometries can be
+exchanged form one Spatial DBMS and the other.")
+    (home-page "https://www.gaia-gis.it/fossil/virtualpg/index")
+    (license (list license:gpl2+
+                   license:lgpl2.1+
+                   license:mpl1.1))))
+
+(define-public opencpn
+  (package
+    (name "opencpn")
+    (version "5.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/OpenCPN/OpenCPN.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1xv3h6svw9aay5ixpql231md3pf00qxvhg62z88daraf18hlkfja"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("bzip2" ,bzip2)
+       ("cairo" ,cairo)
+       ("curl" ,curl)
+       ("glu" ,glu)
+       ("gtk+" ,gtk+)
+       ("libarchive" ,libarchive)
+       ("libelf" ,libelf)
+       ("libexif" ,libexif)
+       ("libsndfile" ,libsndfile)
+       ("lz4" ,lz4)
+       ("mesa" ,mesa)
+       ("pango" ,pango)
+       ("portaudio" ,portaudio)
+       ("sqlite" ,sqlite)
+       ("tinyxml" ,tinyxml)
+       ("wxsvg" ,wxsvg)
+       ("wxwidgets" ,wxwidgets)
+       ("xz" ,xz)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:configure-flags '("-DENABLE_PORTAUDIO=ON"
+                           "-DENABLE_SNDFILE=ON"
+                           "-DBUNDLE_TCDATA=ON"
+                           "-DBUNDLE_GSHHS=CRUDE")
+       #:tests? #f ; No tests defined
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-build
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("set\\(wxWidgets_CONFIG_OPTIONS.*--toolkit=gtk3" all)
+                (string-append all " --libs all")))
+             #t)))))
+    (synopsis "Chart plotter and marine GPS navigation software")
+    (description
+     "OpenCPN is a chart plotter and marine navigation software designed to be
+used at the helm station of your boat while underway.  Chart a course and
+track your position right from your laptop.")
+    (home-page "https://opencpn.org/")
+    (license (list license:asl2.0
+                   license:cc0
+                   license:bsd-2
+                   license:bsd-3
+                   license:expat
+                   license:gpl3+
+                   license:lgpl2.1+
+                   license:lgpl3+
+                   license:sgifreeb2.0
+                   license:zlib))))
+
+(define-public grass
+  (let* ((version "7.8.2")
+         (majorminor (string-join (list-head (string-split version #\.) 2) ""))
+         (grassxx (string-append "grass" majorminor)))
+    (package
+      (name "grass")
+      (version version)
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "https://grass.osgeo.org/" grassxx
+                             "/source/grass-" version ".tar.gz"))
+         (sha256
+          (base32 "1fwsm99kz0bxvjk7442qq1h45ikrmhba8bqclafb61gqg1q6ymrk"))))
+      (build-system gnu-build-system)
+      (inputs
+       `(("bzip2", bzip2)
+         ("cairo" ,cairo)
+         ("fftw" ,fftw)
+         ("freetype" ,freetype)
+         ("gdal" ,gdal)
+         ("geos" ,geos)
+         ("glu" ,glu)
+         ("lapack" ,lapack)
+         ("libpng" ,libpng)
+         ("libtiff" ,libtiff)
+         ("mesa" ,mesa)
+         ("mariadb-dev" ,mariadb "dev")
+         ("mariadb-lib" ,mariadb "lib")
+         ("netcdf" ,netcdf)
+         ("openblas" ,openblas)
+         ("perl" ,perl)
+         ("postgresql" ,postgresql)
+         ("proj.4" ,proj.4)
+         ("python" ,python)
+         ("python-dateutil" ,python-dateutil)
+         ("python-numpy" ,python-numpy)
+         ("python-wxpython" ,python-wxpython)
+         ("readline" ,readline)
+         ("sqlite" ,sqlite)
+         ("wxwidgets" ,wxwidgets)
+         ("zlib" ,zlib)
+         ("zstd" ,zstd "lib")))
+      (native-inputs
+       `(("bash" ,bash-minimal)
+         ("bison" ,bison)
+         ("flex" ,flex)
+         ("pkg-config" ,pkg-config)))
+      (arguments
+       `(#:tests? #f ; No tests
+         #:modules ((guix build gnu-build-system)
+                    ((guix build python-build-system) #:prefix python:)
+                    (guix build utils))
+         #:imported-modules (,@%gnu-build-system-modules
+                             (guix build python-build-system))
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'configure
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((shell (string-append (assoc-ref inputs "bash")
+                                           "/bin/bash")))
+                 (setenv "SHELL" shell)
+                 (setenv "CONFIG_SHELL" shell)
+                 (setenv "LDFLAGS" (string-append "-Wl,-rpath -Wl,"
+                                                  (assoc-ref outputs "out")
+                                                  "/" ,grassxx "/lib")))
+               (invoke "./configure"
+                       (string-append "--prefix="
+                                      (assoc-ref outputs "out"))
+                       "--with-blas"
+                       "--with-bzlib"
+                       (string-append "--with-freetype-includes="
+                                      (assoc-ref inputs "freetype")
+                                      "/include/freetype2")
+                       (string-append "--with-freetype-libs="
+                                      (assoc-ref inputs "freetype")
+                                      "/lib")
+                       "--with-geos"
+                       "--with-lapack"
+                       "--with-mysql"
+                       (string-append "--with-mysql-includes="
+                                      (assoc-ref inputs "mariadb-dev")
+                                      "/include/mysql")
+                       (string-append "--with-mysql-libs="
+                                      (assoc-ref inputs "mariadb-lib")
+                                      "/lib")
+                       "--with-netcdf"
+                       "--with-postgres"
+                       (string-append "--with-proj-share="
+                                      (assoc-ref inputs "proj.4")
+                                      "/share/proj")
+                       "--with-pthread"
+                       "--with-readline"
+                       "--with-sqlite"
+                       "--with-wxwidgets")))
+           (add-after 'install 'install-links
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Put links for includes and libraries in the standard places.
+               (let* ((out (assoc-ref outputs "out"))
+                      (dir (string-append out "/" ,grassxx)))
+                 (symlink (string-append dir "/include")
+                          (string-append out "/include"))
+                 (symlink (string-append dir "/lib")
+                          (string-append out "/lib")))
+               #t))
+           (add-after 'install-links 'wrap-python
+             (assoc-ref python:%standard-phases 'wrap)))))
+      (synopsis "GRASS Geographic Information System")
+      (description
+       "GRASS (Geographic Resources Analysis Support System), is a Geographic
+Information System (GIS) software suite used for geospatial data management and
+analysis, image processing, graphics and maps production, spatial modeling, and
+visualization.")
+      (home-page "https://grass.osgeo.org/")
+      (license license:gpl2+))))
+
+(define-public saga
+  (package
+    (name "saga")
+    (version "7.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/saga-gis/SAGA%20-%20"
+                           (version-major version) "/SAGA%20-%20" version
+                           "/saga-" version ".tar.gz"))
+       (sha256
+        (base32 "09j5magmayq2y620kqa490mfd1kpdp3lng2ifcgbrmssc079ybm0"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("swig" ,swig)))
+    (inputs
+     `(("curl" ,curl)
+       ("fftw" ,fftw)
+       ("gdal" ,gdal)
+       ("hdf5" ,hdf5)
+       ("jasper" ,jasper)
+       ("libharu" ,libharu)
+       ("libtiff" ,libtiff)
+       ("opencv" ,opencv)
+       ("postgresql" ,postgresql)
+       ("proj.4" ,proj.4)
+       ("python" ,python)
+       ("qhull" ,qhull)
+       ("unixodbc" ,unixodbc)
+       ("vigra" ,vigra)
+       ("wxwidgets" ,wxwidgets)))
+    (arguments
+     '(#:configure-flags '("--enable-python")))
+    (synopsis "System for Automated Geoscientific Analyses")
+    (description
+     "SAGA (System for Automated Geoscientific Analyses) is a Geographic
+Information System (GIS) software.  It has been designed for an easy and
+effective implementation of spatial algorithms and it offers a comprehensive,
+growing set of geoscientific methods.")
+    (home-page "http://www.saga-gis.org")
+    (license (list license:gpl2+ license:lgpl2.1+))))
+
+(define-public qgis
+  (package
+    (name "qgis")
+    (version "3.12.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://qgis.org/downloads/qgis-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32 "1a41525y8ac44gzcfaffjx0lyrm49hgnr83jrq40r5mqd3vpmp57"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:modules ((guix build cmake-build-system)
+                  ((guix build python-build-system) #:prefix python:)
+                  (guix build qt-utils)
+                  (guix build utils))
+       #:imported-modules (,@%cmake-build-system-modules
+                           (guix build python-build-system)
+                           (guix build qt-utils))
+       #:phases
+       (modify-phases %standard-phases
+         ;; Configure correct path to PyQt5 SIP directory
+         (add-after 'unpack 'configure-pyqt5-sip-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "cmake/FindPyQt5.cmake"
+               (("\"\\\\\\\\1\" PYQT5_SIP_DIR")
+                (string-append "\"" (assoc-ref inputs "python-pyqt+qscintilla")
+                               "/share/sip\" PYQT5_SIP_DIR")))
+             (substitute* (list "scripts/prepare-commit.sh"
+                                "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_uptodate.sh"
+                                "tests/code_layout/test_sipify.sh")
+               (("\\$\\(git rev-parse --show-toplevel\\)")
+                (getcwd)))
+             (substitute* "tests/code_layout/test_sip_include.sh"
+               (("^REV=.*") "REV=currentrev\n"))
+             #t))
+         (replace 'check
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "HOME" "/tmp")
+             (system (string-append (assoc-ref inputs "xorg-server")
+                                    "/bin/Xvfb :1 &"))
+             (setenv "DISPLAY" ":1")
+             (setenv "TRAVIS" "true")
+             (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
+             (invoke "ctest"
+                     "-E" (string-join
+                           '(;; Disable tests that require network access
+                             "qgis_filedownloader"
+                             ;; TODO: Find why the following tests fail
+                             "ProcessingQgisAlgorithmsTestPt1"
+                             "ProcessingQgisAlgorithmsTestPt2"
+                             "ProcessingQgisAlgorithmsTestPt3"
+                             "ProcessingQgisAlgorithmsTestPt4"
+                             "ProcessingGdalAlgorithmsRasterTest"
+                             "ProcessingGdalAlgorithmsVectorTest"
+                             "ProcessingGrass7AlgorithmsImageryTest"
+                             "ProcessingGrass7AlgorithmsRasterTest"
+                             "ProcessingGrass7AlgorithmsVectorTest"
+                             "ProcessingOtbAlgorithmsTest"
+                             "qgis_authmanagertest"
+                             "qgis_compositionconvertertest"
+                             "qgis_coordinatereferencesystemtest"
+                             "qgis_geometrytest"
+                             "qgis_layouthtmltest"
+                             "qgis_layoutmaptest"
+                             "qgis_layoutmapgridtest"
+                             "qgis_painteffecttest"
+                             "qgis_pallabelingtest"
+                             "qgis_svgmarkertest"
+                             "qgis_taskmanagertest"
+                             "qgis_ziplayertest"
+                             "qgis_processingtest"
+                             "qgis_wcsprovidertest"
+                             "qgis_arcgisrestutilstest"
+                             "qgis_grassprovidertest7"
+                             "qgis_gpsinformationwidget"
+                             "PyCoreAdittions"
+                             "PyQgsPythonProvider"
+                             "PyQgsAnnotation"
+                             "PyQgsAuthenticationSystem"
+                             "PyQgsProject"
+                             "PyQgsFileUtils"
+                             "PyQgsGeometryTest"
+                             "PyQgsImageCache"
+                             "PyQgsLayerMetadata"
+                             "PyQgsLayout"
+                             "PyQgsLayoutHtml"
+                             "PyQgsLayoutMapGrid"
+                             "PyQgsMetadataBase"
+                             "PyQgsLayoutExporter"
+                             "PyQgsLayoutLegend"
+                             "PyQgsMapLayer"
+                             "PyQgsOGRProviderGpkg"
+                             "PyQgsPalLabelingLayout"
+                             "PyQgsImportIntoPostGIS"
+                             "PyQgsProviderConnectionPostgres"
+                             "PyQgsProviderConnectionGpkg"
+                             "PyQgsShapefileProvider"
+                             "PyQgsSvgCache"
+                             "PyQgsTextRenderer"
+                             "PyQgsOGRProvider"
+                             "PyQgsSpatialiteProvider"
+                             "PyQgsVectorFileWriter"
+                             "PyQgsVectorLayer"
+                             "PyQgsVectorLayerUtils"
+                             "PyQgsVirtualLayerProvider"
+                             "PyQgsWFSProvider"
+                             "PyQgsOapifProvider"
+                             "PyQgsLayerDependencies"
+                             "PyQgsDBManagerGpkg"
+                             "PyQgsDBManagerSpatialite"
+                             "PyQgsSettings"
+                             "PyQgsAuxiliaryStorage"
+                             "PyQgsSelectiveMasking"
+                             "PyQgsAppStartup"
+                             "qgis_geometrycheckstest"
+                             "qgis_shellcheck"
+                             "qgis_sipify"
+                             "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 #:allow-other-keys)
+             (wrap-qt-program (assoc-ref outputs "out") "qgis")
+             #t))
+         (add-after 'wrap-qt 'wrap-gis
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (saga (string-append (assoc-ref inputs "saga") "/bin"))
+                    (grass-version ,(package-version grass))
+                    (grass-majorminor (string-join
+                                       (list-head
+                                        (string-split grass-version #\.) 2)
+                                       ""))
+                    (grass (string-append (assoc-ref inputs "grass")
+                                          "/grass" grass-majorminor)))
+               (wrap-program (string-append out "/bin/qgis")
+                 `("PATH" ":" prefix (,saga))
+                 `("QGIS_PREFIX_PATH" = (,out))
+                 `("GISBASE" = (,grass))))
+             #t)))))
+    (inputs
+     `(("exiv2" ,exiv2)
+       ("expat" ,expat)
+       ("gdal" ,gdal)
+       ("geos" ,geos)
+       ("gpsbabel" ,gpsbabel)
+       ("grass" ,grass)
+       ("gsl" ,gsl)
+       ("hdf5" ,hdf5)
+       ("libspatialindex" ,libspatialindex)
+       ("libspatialite" ,libspatialite)
+       ("libxml2" ,libxml2)
+       ("libzip" ,libzip)
+       ("netcdf" ,netcdf)
+       ("postgresql" ,postgresql)
+       ("proj" ,proj)
+       ("python" ,python)
+       ("python-chardet" ,python-chardet)
+       ("python-dateutil" ,python-dateutil)
+       ("python-gdal" ,python-gdal)
+       ("python-jinja2" ,python-jinja2)
+       ("python-numpy" ,python-numpy)
+       ("python-owslib" ,python-owslib)
+       ("python-psycopg2" ,python-psycopg2)
+       ("python-pygments" ,python-pygments)
+       ("python-pyqt+qscintilla" ,python-pyqt+qscintilla)
+       ("python-pytz" ,python-pytz)
+       ("python-pyyaml" ,python-pyyaml)
+       ("python-requests" ,python-requests)
+       ("python-sip" ,python-sip)
+       ("python-six" ,python-six)
+       ("python-urllib3" ,python-urllib3)
+       ("qca" ,qca)
+       ("qscintilla" ,qscintilla)
+       ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtkeychain" ,qtkeychain)
+       ("qtlocation" ,qtlocation)
+       ("qtserialport" ,qtserialport)
+       ("qtsvg" ,qtsvg)
+       ("qtwebkit" ,qtwebkit)
+       ("qwt" ,qwt)
+       ("saga" ,saga)
+       ("sqlite" ,sqlite)))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("perl" ,perl)
+       ("perl-yaml-tiny" ,perl-yaml-tiny)
+       ("pkg-config" ,pkg-config)
+       ("python-mock" ,python-mock)
+       ("python-nose2" ,python-nose2)
+       ("qttools" ,qttools)
+       ("shellcheck" ,shellcheck)
+       ("xorg-server" ,xorg-server-for-tests)))
+    (home-page "https://qgis.org")
+    (synopsis "Geographical information system")
+    (description "QGIS is an easy to use Geographical Information
+System (GIS).  It is a GIS data viewer and editor.  QGIS supports a number of
+raster and vector data formats, with new support easily added using the plugin
+architecture.")
+    (license
+     (list
+      license:asl1.1
+      license:asl2.0
+      license:bsd-2
+      license:bsd-3
+      license:boost1.0
+      license:cc-by3.0
+      license:cc-by4.0
+      license:cc-by-sa3.0
+      license:cc-by-sa4.0
+      (license:fsdg-compatible "https://www.deviantart.com/elvensword")
+      (license:fsf-free "file://debian/copyright" "Go Squared")
+      license:expat
+      license:fdl1.2+
+      (license:fsf-free
+       "https://www.deviantart.com/webgoddess/art/Reddish-Inspired-Gradients-42208824")
+      (license:fsf-free
+       "file://debian/copyright"
+       "QT-Commercial or LGPL-2.1 with Digia Qt LGPL Exception 1.1 or GPL-3")
+      license:gpl2
+      license:gpl2+
+      license:gpl3
+      license:gpl3+
+      license:isc
+      license:lgpl2.0+
+      license:lgpl2.1
+      license:lgpl2.1+
+      license:lgpl3
+      (license:non-copyleft "file://debian/copyright" "BSD-like-gist")
+      (license:non-copyleft "file://debian/copyright" "Jim Mossman Attribution")
+      (license:non-copyleft
+       "https://www.ncl.ucar.edu/Download/NCL_source_license.shtml"
+       "NCL Source Code License")
+      license:ogl-psi1.0
+      license:opl1.0+
+      license:public-domain
+      license:qwt1.0))))