Subject: [bug#38149] [WIP] gnu: Add qgis.

From: Arun Isaac <[email-masked]>
Date: Fri, 20 Dec 2019 22:22:41 +0530

> I cannot find libspatialindex 1.9.3 here:
>
> https://download.osgeo.org/libspatialindex/

I have fixed this now.

> How could you build it (Probably answer: You guix downloaded it in
> your store and it was found by the right checksum)?

That's probably what happened, I guess.

> I found a download link here:
>
> https://libspatialindex.org/#download
>
> Or we better take the git sources? Could you please update the patch?

Let's use the source tarball for now. I think it's stable enough and the
link won't break again.

Yes, we should use proj instead of proj.4 wherever possible. But, if I
remember correctly, some packages work only with proj.4 for now. Also,
we should push some of the simpler patches (say, the simple update
patches) to master right away. That will help to declutter this bug
report a little bit. WDYT?

Please find attached a new patchset. Around 56 tests are still failing
in the qgis build. I brought it down from around a 100 or so.

From 77ac87f26e493f0e4a8eb2f4b38f8ae679e6765f Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Wed, 4 Dec 2019 19:55:17 +0530
Subject: [PATCH 01/14] gnu: geos: Update to 3.8.0.

* gnu/packages/geo.scm (geos): Update to 3.8.0.
---
 gnu/packages/geo.scm | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 278ece094c..b6948a45c9 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2017, 2018 Björn Höfling <[email-masked]>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <[email-masked]>
 ;;; Copyright © 2018 Ricardo Wurmus <[email-masked]>
-;;; Copyright © 2018 Arun Isaac <[email-masked]>
+;;; Copyright © 2018, 2019 Arun Isaac <[email-masked]>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <[email-masked]>
 ;;; Copyright © 2018, 2019 Julien Lepiller <[email-masked]>
 ;;; Copyright © 2019 Guillaume Le Vaillant <[email-masked]>
@@ -77,7 +77,7 @@
 (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-"
@@ -85,7 +85,7 @@
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1312m02xk4sp6f1xdpb9w0ic0zbxg90p5y66qnwidl5fksscf1h0"))))
+                "1mb2v9fy1gnbjhcgv0xny11ggfb17vkzsajdyibigwsxr4ylq4cr"))))
     (build-system gnu-build-system)
     (arguments `(#:phases
                  (modify-phases %standard-phases
-- 
2.23.0

From 471bcacb79de672781a775cb475099c4c0e79927 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Thu, 5 Dec 2019 01:43:42 +0530
Subject: [PATCH 02/14] gnu: Add proj.

* gnu/packages/geo.scm (proj): New variable.
---
 gnu/packages/geo.scm | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index b6948a45c9..1a1a2c2b37 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -321,6 +321,41 @@ fully fledged Spatial SQL capabilities.")
                    license:mpl1.1
                    license:public-domain))))
 
+(define-public proj
+  (package
+    (name "proj")
+    (version "6.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://download.osgeo.org/proj/proj-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "0l1as8f4zfg74fms6h5p5psziw0lpznja1xnirzsscpnfbwc005k"))))
+    (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
+                   ;; cmake/*
+                   license:boost1.0))))
+
 (define-public proj.4
   (package
     (name "proj.4")
-- 
2.23.0

From e0d398a4c6e643b4f8079a318c3c2a0637e6a067 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Thu, 5 Dec 2019 01:45:30 +0530
Subject: [PATCH 03/14] gnu: gdal: Update to 3.0.2.

* gnu/packages/geo.scm (gdal): Update to 3.0.2.
[inputs]: Add proj.
---
 gnu/packages/geo.scm | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 1a1a2c2b37..6c7eeae093 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -569,7 +569,7 @@ development.")
 (define-public gdal
   (package
     (name "gdal")
-    (version "2.2.4")
+    (version "3.0.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -577,7 +577,7 @@ development.")
                      version ".tar.gz"))
               (sha256
                (base32
-                "1951f7b69x3d1vic0rmq92q8f4bj3hbxnxmj5jl0cc3zg0isgmdr"))
+                "0f80izh9wshrsw55kg9abpip74hk6frk3hgqrkqbyn3f6i8g2z3q"))
               (modules '((guix build utils)))
               (snippet
                 `(begin
@@ -629,6 +629,7 @@ development.")
        ("libtiff" ,libtiff)
        ("libwebp" ,libwebp)
        ("pcre" ,pcre)
+       ("proj" ,proj)
        ("zlib" ,zlib)))
     (home-page "http://www.gdal.org/")
     (synopsis "Raster and vector geospatial data format library")
-- 
2.23.0

From 80ae71abb1a40d5b49b33ad2565b675561caad7b Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Thu, 5 Dec 2019 01:46:28 +0530
Subject: [PATCH 04/14] gnu: libspatialindex: Update to 1.9.3.

* gnu/packages/geo.scm (libspatialindex): Update to 1.9.3.
[build-system]: Switch to cmake-build-system.
[source]: Update URI.
---
 gnu/packages/geo.scm | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 6c7eeae093..f211f49842 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -1048,16 +1048,16 @@ 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:
-- 
2.23.0

From 06c9c61daef220d16f0e5e8c1c5eb1a9da499457 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Thu, 5 Dec 2019 01:47:47 +0530
Subject: [PATCH 05/14] gnu: libgeotiff: Update to 1.5.1.

* gnu/packages/geo.scm (libgeotiff): Update to 1.5.1.
[inputs]: Replace proj.4 with proj.
---
 gnu/packages/geo.scm | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index f211f49842..2019e633fb 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -227,35 +227,30 @@ 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"))
        (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)
+       ("proj" ,proj)
        ("zlib" ,zlib)))
     (arguments
-     `(#:configure-flags
+     `(#:tests? #f
+       #:configure-flags
        (list (string-append "--with-zlib")
              (string-append "--with-jpeg")
              (string-append "--with-libtiff=" (assoc-ref %build-inputs "libtiff")))))
-- 
2.23.0

From f7fc3ed9cea3be242ff39c85ffba1961874b10e7 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Thu, 5 Dec 2019 16:28:38 +0530
Subject: [PATCH 06/14] licenses: Add GNU Free Documentation licenses.

* guix/licenses.scm (gfdl1.2+, gfdl1.2+-without-invariant-sections): New
variables.
---
 guix/licenses.scm | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/guix/licenses.scm b/guix/licenses.scm
index 41d4fefad2..24e69ac1c5 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -54,6 +54,7 @@
             freetype
             freebsd-doc
             giftware
+            gfdl1.2+ gfdl1.2+-without-invariant-sections
             gpl1 gpl1+ gpl2 gpl2+ gpl3 gpl3+
             gfl1.0
             fdl1.1+ fdl1.2+ fdl1.3+
@@ -284,6 +285,16 @@ at URI, which may be a file:// URI pointing the package's tree."
            "http://directory.fsf.org/wiki/License:Freetype"
            "https://www.gnu.org/licenses/license-list.html#freetype"))
 
+(define gfdl1.2+
+  (license "GFDL 1.2+"
+           "https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html"
+           "https://www.gnu.org/licenses/license-list.html#FDL"))
+
+(define gfdl1.2+-without-invariant-sections
+  (license "GFDL 1.2+ without invariant sections"
+           "https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html"
+           "https://www.gnu.org/licenses/license-list.html#FDL"))
+
 (define giftware
   (license "Giftware"
            "http://liballeg.org/license.html"
-- 
2.23.0

From 37481bb118f3d3a4e3c6b525d50c7558ddd69e20 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Thu, 5 Dec 2019 16:30:09 +0530
Subject: [PATCH 07/14] licenses: Add Open Government Licence for Public Sector
 Information.

* guix/licenses.scm (ogl-psi1.0): New variable.
---
 guix/licenses.scm | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/guix/licenses.scm b/guix/licenses.scm
index 24e69ac1c5..3b79e7c1c3 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -76,6 +76,7 @@
             ms-pl
             ncsa
             nmap
+            ogl-psi1.0
             openldap2.8 openssl
             perl-license
             psfl public-domain
@@ -527,6 +528,11 @@ at URI, which may be a file:// URI pointing the package's tree."
            "https://svn.nmap.org/nmap/COPYING"
            "https://fedoraproject.org/wiki/Licensing/Nmap"))
 
+(define ogl-psi1.0
+  (license "Open Government Licence for Public Sector Information"
+           "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/1/"
+           #f))
+
 (define openssl
   (license "OpenSSL"
            "http://directory.fsf.org/wiki/License:OpenSSL"
-- 
2.23.0

From 811ae1578e141e4508dfbde96f51c749f4ec9af1 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Thu, 5 Dec 2019 16:31:50 +0530
Subject: [PATCH 08/14] licenses: Add QWT 1.0 license.

* guix/licenses.scm (qwt1.0): New variable.
---
 guix/licenses.scm | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/guix/licenses.scm b/guix/licenses.scm
index 3b79e7c1c3..80655b7ab4 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -81,6 +81,7 @@
             perl-license
             psfl public-domain
             qpl
+            qwt1.0
             repoze
             ruby
             sgifreeb2.0
@@ -565,6 +566,11 @@ at URI, which may be a file:// URI pointing the package's tree."
            "http://directory.fsf.org/wiki/License:QPLv1.0"
            "http://www.gnu.org/licenses/license-list.html#QPL"))
 
+(define qwt1.0
+  (license "QWT 1.0"
+           "http://qwt.sourceforge.net/qwtlicense.html"
+           "GNU Lesser General Public License with exceptions"))
+
 (define repoze
   (license "Repoze"
            "http://repoze.org/LICENSE.txt"
-- 
2.23.0

From 641c650636b32142670f455da3f39990bd308c26 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Fri, 20 Dec 2019 18:52:38 +0530
Subject: [PATCH 09/14] gnu: postgis: Update to 3.0.0.

* gnu/packages/geo.scm (postgis): Update to 3.0.0.
[inputs]: Add json-c and libjpeg-turbo. Replace proj.4 with proj.
---
 gnu/packages/geo.scm | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 2019e633fb..2b2f090639 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -676,14 +676,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
@@ -702,10 +702,12 @@ utilities for data translation and processing.")
     (inputs
      `(("gdal" ,gdal)
        ("geos" ,geos)
+       ("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)))
-- 
2.23.0

From f9dc84e6fc7ba0adb4bd80715f12ed70d531ac66 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Fri, 20 Dec 2019 21:36:50 +0530
Subject: [PATCH 10/14] gnu: gdal: Enable ODS format driver.

* gnu/packages/geo.scm (gdal)[inputs]: Add expat.
[arguments]: Add --with-expat to #:configure-flags.
---
 gnu/packages/geo.scm | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 2b2f090639..54f40c0ed9 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -606,6 +606,7 @@ development.")
            (with "--with-libtiff" "libtiff")
            (with "--with-geotiff" "libgeotiff")
            (with "--with-libz" "zlib")
+           (with "--with-expat" "expat")
            "--with-pcre"))
        #:phases
        (modify-phases %standard-phases
@@ -614,7 +615,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)
-- 
2.23.0

From 0bb22bac6a58141d918245654a7f6abd172204ca Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Fri, 20 Dec 2019 21:39:22 +0530
Subject: [PATCH 11/14] gnu: gdal: Enable GPKG format driver.

* gnu/packages/geo.scm (gdal)[inputs]: Enable sqlite.
[arguments]: Add --with-sqlite3 to #:configure-flags.
---
 gnu/packages/geo.scm | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 54f40c0ed9..8bdd6358a6 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -607,6 +607,7 @@ development.")
            (with "--with-geotiff" "libgeotiff")
            (with "--with-libz" "zlib")
            (with "--with-expat" "expat")
+           (with "--with-sqlite3" "sqlite")
            "--with-pcre"))
        #:phases
        (modify-phases %standard-phases
@@ -627,6 +628,7 @@ development.")
        ("libwebp" ,libwebp)
        ("pcre" ,pcre)
        ("proj" ,proj)
+       ("sqlite" ,sqlite)
        ("zlib" ,zlib)))
     (home-page "http://www.gdal.org/")
     (synopsis "Raster and vector geospatial data format library")
-- 
2.23.0

From 81f2314930100666a98f29a1c10a624e90bc74bc Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Fri, 20 Dec 2019 21:54:44 +0530
Subject: [PATCH 12/14] gnu: gdal: Enable netCDF format driver.

* gnu/packages/geo.scm (gdal)[inputs]: Add netcdf.
---
 gnu/packages/geo.scm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 8bdd6358a6..768ddd862d 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -626,6 +626,7 @@ development.")
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)
        ("libwebp" ,libwebp)
+       ("netcdf" ,netcdf)
        ("pcre" ,pcre)
        ("proj" ,proj)
        ("sqlite" ,sqlite)
-- 
2.23.0

From 742ad584435ec3c3138a900043e3a00cfc9d39e4 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Fri, 20 Dec 2019 21:46:21 +0530
Subject: [PATCH 13/14] gnu: python: Enable loadable sqlite extensions.

* gnu/packages/python.scm (python-2.7)[arguments]: Add
--enable-loadable-sqlite-extensions to #:configure-flags.
---
 gnu/packages/python.scm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 048941e8a9..eb15a0e840 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -145,6 +145,7 @@
              "--with-system-ffi"                  ;build ctypes
              "--with-ensurepip=install"           ;install pip and setuptools
              "--enable-unicode=ucs4"
+             "--enable-loadable-sqlite-extensions"
 
              ;; Prevent the installed _sysconfigdata.py from retaining a reference
              ;; to coreutils.
-- 
2.23.0

From c08492669cf43550f0797d83a0a5461ba1311e64 Mon Sep 17 00:00:00 2001
From: Arun Isaac <[email-masked]>
Date: Thu, 5 Dec 2019 16:32:49 +0530
Subject: [PATCH 14/14] gnu: Add qgis.

* gnu/packages/geo.scm (qgis): New variable.
---
 gnu/packages/geo.scm | 281 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 280 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 768ddd862d..cb9779807f 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -45,21 +45,26 @@
   #:use-module (guix utils)
   #:use-module (gnu packages astronomy)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages haskell-apps)
   #:use-module (gnu packages image)
   #: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 perl)
   #:use-module (gnu packages pkg-config)
@@ -69,10 +74,12 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sqlite)
+  #: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
@@ -1329,3 +1336,275 @@ MaxMind DB files.")
     (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 qgis
+  (package
+    (name "qgis")
+    (version "3.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://qgis.org/downloads/qgis-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32
+         "04ph8abhq0f2hzq276a070nwyhzfrvyhswks6gx2z4pvv50irsr5"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:modules ((guix build cmake-build-system)
+                  ((guix build python-build-system) #:prefix python:)
+                  (guix build utils))
+       #:imported-modules (,@%cmake-build-system-modules
+                           (guix build python-build-system))
+       #: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"
+                     ;; Disable tests that require network access
+                     "-E" "qgis_filedownloader")))
+         (add-after 'install 'wrap
+           (assoc-ref python:%standard-phases 'wrap)))))
+    (inputs
+     `(("exiv2" ,exiv2)
+       ("expat" ,expat)
+       ("gdal" ,gdal)
+       ("geos" ,geos)
+       ("gsl" ,gsl)
+       ("libspatialindex" ,libspatialindex)
+       ("libspatialite" ,libspatialite)
+       ("libzip" ,libzip)
+       ("postgresql" ,postgresql)
+       ("proj" ,proj)
+       ("python" ,python)
+       ("python-gdal" ,python-gdal)
+       ("python-psycopg2" ,python-psycopg2)
+       ("python-pyqt+qscintilla" ,python-pyqt+qscintilla)
+       ("python-pyyaml" ,python-pyyaml)
+       ("qca" ,qca)
+       ("qscintilla" ,qscintilla)
+       ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtkeychain" ,qtkeychain)
+       ("qtlocation" ,qtlocation)
+       ("qtserialport" ,qtserialport)
+       ("qtsvg" ,qtsvg)
+       ("qttools" ,qttools)
+       ("qtwebkit" ,qtwebkit)
+       ("qwt" ,qwt)
+       ("sqlite" ,sqlite-with-column-metadata)))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("perl" ,perl)
+       ("perl-yaml-tiny" ,perl-yaml-tiny)
+       ("python-mock" ,python-mock)
+       ("python-nose2" ,python-nose2)
+       ("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:gpl2+
+           ;; qgis.dtd
+           ;; src/core/pal/rtree.hpp
+           ;; src/plugins/grass/qtermwidget/konsole_wcwidth.*
+           ;; cmake/PythonCompile.py
+           ;; resources/cpt-city-qgis-min/dg/*
+           ;; resources/cpt-city-qgis-min/gery/*
+           ;; resources/cpt-city-qgis-min/jjg/dem/*
+           ;; resources/cpt-city-qgis-min/jjg/misc/*
+           ;; resources/cpt-city-qgis-min/jjg/physics/*
+           ;; tests/testdata/cpt-city/jjg/misc/*
+           ;; resources/cpt-city-qgis-min/km/*
+           ;; resources/cpt-city-qgis-min/pd/*
+           ;; resources/cpt-city-qgis-min/wkp/encyclopedia/*
+           ;; resources/cpt-city-qgis-min/wkp/template/*
+           ;; resources/cpt-city-qgis-min/ocal/*
+           ;; resources/cpt-city-qgis-min/rf/*
+           ;; resources/cpt-city-qgis-min/tp/*
+           license:public-domain
+           ;; python/plugins/processing/modeler/ModelerArrowItem.py
+           ;; src/app/qgssettingstree.cpp
+           ;; src/app/qgssettingstree.h
+           ;; src/app/qgsvariantdelegate.cpp
+           ;; src/app/qgsvariantdelegate.h
+           ;; src/app/qtmain_android.cpp
+           ;; cmake/Bison.cmake
+           ;; cmake/FindExpat.cmake
+           ;; cmake/FindGRASS.cmake
+           ;; cmake/FindPostgres.cmake
+           ;; cmake/FindProj.cmake
+           ;; cmake/FindSqlite3.cmake
+           ;; cmake/Flex.cmake
+           ;; cmake/FindFcgi.cmake
+           ;; cmake/FindGDAL.cmake
+           ;; cmake/FindGEOS.cmake
+           ;; cmake/FindGSL.cmake
+           ;; cmake/FindIconv.cmake
+           ;; cmake/FindOSGEARTH.cmake
+           ;; cmake/FindLibPython.py
+           ;; cmake/FindPyQt4.cmake
+           ;; cmake/FindPyQt4.py
+           ;; cmake/FindPyQt5.cmake
+           ;; cmake/FindPyQt5.py
+           ;; cmake/FindPythonLibrary.cmake
+           ;; cmake/FindSIP.cmake
+           ;; cmake/FindSIP.py
+           ;; cmake/PythonMacros.cmake
+           ;; cmake/SIPMacros.cmake
+           ;; cmake/FindQCA.cmake
+           ;; cmake/FindQextserialport.cmake
+           ;; cmake/FindQGIS.cmake
+           ;; cmake/FindQsci.cmake
+           ;; cmake/FindQsci.py
+           ;; cmake/FindQScintilla.cmake
+           ;; cmake/FindQwt.cmake
+           ;; cmake/FindSpatiaLite.cmake
+           ;; cmake/MacBundleMacros.cmake
+           ;; cmake/MacPlistMacros.cmake
+           ;; cmake/PyQtMacros.cmake
+           ;; cmake/QCAMacros.cmake
+           ;; cmake/UsePythonTest.cmake
+           license:bsd-3
+           ;; external//qwtpolar-1.1.1/*
+           ;; src/gui/raster/qwt5_histogram_item.h
+           license:qwt1.0
+           ;; external/astyle/*
+           license:lgpl2.1+
+           ;; external/nmea/config.h
+           ;; external/nmea/context.c
+           ;; external/nmea/context.h
+           ;; external/nmea/gmath.c
+           ;; external/nmea/gmath.h
+           ;; external/nmea/info.c
+           ;; external/nmea/info.h
+           ;; external/nmea/nmeatime.h
+           ;; external/nmea/parse.c
+           ;; external/nmea/parse.h
+           ;; external/nmea/parser.h
+           ;; external/nmea/sentence.c
+           ;; external/nmea/sentence.h
+           ;; external/nmea/time.c
+           ;; external/nmea/tok.c
+           ;; external/nmea/tok.h
+           ;; external/nmea/units.h
+           ;; src/plugins/evis/*
+           ;; src/plugins/grass/qtermwidget/kprocess.cpp
+           ;; src/plugins/grass/qtermwidget/kprocess.h
+           ;; src/plugins/grass/qtermwidget/kptydevice.cpp
+           ;; src/plugins/grass/qtermwidget/kptydevice.h
+           ;; src/plugins/grass/qtermwidget/kptyprocess.cpp
+           ;; src/plugins/grass/qtermwidget/kptyprocess.h
+           ;; src/plugins/grass/qtermwidget/kpty.cpp
+           ;; src/plugins/grass/qtermwidget/kpty.h
+           ;; src/plugins/grass/qtermwidget/kpty_p.h
+           ;; src/plugins/grass/qtermwidget/qtermwidget.cpp
+           ;; src/plugins/grass/qtermwidget/qtermwidget.h
+           ;; src/plugins/grass/qtermwidget/TerminalCharacterDecoder.cpp
+           ;; src/plugins/grass/qtermwidget/TerminalCharacterDecoder.h
+           license:lgpl2.0+
+           ;; src/core/pal/*
+           ;; resources/cpt-city-qgis-min/ds9/*
+           ;; resources/cpt-city-qgis-min/grass/*
+           license:gpl3+
+           ;; src/core/symbology/qgscolorbrewerpalette.cpp
+           license:asl2.0
+           ;; images/themes/default/*
+           ;; resources/cpt-city-qgis-min/gps/*
+           ;; resources/cpt-city-qgis-min/nd/*
+           ;; resources/cpt-city-qgis-min/wkp/country/*
+           ;; resources/cpt-city-qgis-min/wkp/jarke/*
+           ;; resources/cpt-city-qgis-min/wkp/jarke/*
+           ;; resources/cpt-city-qgis-min/wkp/knutux/*
+           ;; resources/cpt-city-qgis-min/wkp/lilleskut/*
+           ;; resources/cpt-city-qgis-min/wkp/plumbago/*
+           ;; resources/cpt-city-qgis-min/wkp/precip/*
+           ;; resources/cpt-city-qgis-min/wkp/schwarzwald/*
+           ;; resources/cpt-city-qgis-min/wkp/shadowxfox/*
+           ;; resources/cpt-city-qgis-min/wkp/tubs/*
+           license:cc-by-sa3.0
+           ;; resources/cpt-city-qgis-min/cb/*
+           ;; resources/cpt-city-qgis-min/jjg/cbac/*
+           ;; resources/cpt-city-qgis-min/jjg/cbcont/*
+           ;; resources/cpt-city-qgis-min/jjg/polarity/*
+           license:asl1.1
+           ;; resources/cpt-city-qgis-min/ds/*
+           (license:fsf-free
+            "https://www.deviantart.com/webgoddess/art/Reddish-Inspired-Gradients-42208824")
+           ;; resources/cpt-city-qgis-min/es/*
+           (license:fsdg-compatible
+            "https://www.deviantart.com/elvensword")
+           ;; resources/cpt-city-qgis-min/gist/*
+           (license:non-copyleft "file://debian/copyright"
+                                 "BSD-like-gist")
+           ;; resources/cpt-city-qgis-min/go2/webtwo/*
+           (license:fsf-free "file://debian/copyright"
+                             "Go Squared")
+           ;; resources/cpt-city-qgis-min/h5/*
+           license:expat
+           ;; resources/cpt-city-qgis-min/jm/*
+           (license:non-copyleft "file://debian/copyright"
+                                 "Jim Mossman Attribution")
+           ;; resources/cpt-city-qgis-min/ncl/*
+           (license:non-copyleft
+            "https://www.ncl.ucar.edu/Download/NCL_source_license.shtml"
+            "NCL Source Code License")
+           ;; resources/cpt-city-qgis-min/os/*
+           ;; resources/cpt-city-qgis-min/ukmo/*
+           license:ogl-psi1.0
+           ;; resources/cpt-city-qgis-min/wkp/ice/*
+           license:gfdl1.2+-without-invariant-sections
+           ;; src/gui/symbology/characterwidget.cpp
+           ;; src/gui/symbology/characterwidget.h
+           ;; src/providers/oracle/ocispatial/main.cpp
+           ;; src/providers/oracle/ocispatial/qsql_ocispatial.cpp
+           ;; src/providers/oracle/ocispatial/qsql_ocispatial.h
+           ;; src/providers/oracle/ocispatial/qsqlcachedresult_p.h
+           ;; src/providers/spatialite/qspatialite/qsql_spatialite.cpp
+           ;; src/providers/spatialite/qspatialite/qsql_spatialite.h
+           ;; src/providers/spatialite/qspatialite/qsqlcachedresult_p.h
+           ;; src/providers/spatialite/qspatialite/smain.cpp
+           ;; tests/qt_modeltest/modeltest.cpp
+           ;; tests/qt_modeltest/modeltest.h
+           ;; tests/qt_modeltest/tst_modeltest.cpp
+           ;; tests/qt_modeltest/dynamictreemodel.cpp
+           ;; tests/qt_modeltest/dynamictreemodel.h
+           (license:fsf-free
+            "file://debian/copyright"
+            "QT-Commercial or LGPL-2.1 with Digia Qt LGPL Exception 1.1 or GPL-3")))))
-- 
2.23.0