unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
@ 2020-05-07  3:23 Maxim Cournoyer
  2020-05-07  4:37 ` [bug#41118] [PATCH V2] " Maxim Cournoyer
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Maxim Cournoyer @ 2020-05-07  3:23 UTC (permalink / raw)
  To: 41118; +Cc: Leo Famulari


[-- Attachment #1.1: Type: text/plain, Size: 412 bytes --]

Hello!

The following updates Inkscape to its 1.0 version.  The test suite is
enabled and an effort is made to unbundle as much of 3rd party libraries
as possible (but more can be done, if you'd like to help: see the
comments in the patch).

The last patch of the series (Add libdepixelize) is added as a WIP, and
is included as a curiosity only (not intended to be merged in its
current state).

Enjoy!

Maxim


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-gnu-libsoup-Add-the-missing-PHP-dependency.patch --]
[-- Type: text/x-patch, Size: 1242 bytes --]

From 00421dc8f22a84260ade4cccec9d0a27b532f9ca Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Wed, 8 Jan 2020 21:56:33 -0500
Subject: [PATCH 01/14] gnu: libsoup: Add the missing PHP dependency.

* gnu/packages/gnome.scm (libsoup)[native-inputs]: Add php.
---
 gnu/packages/gnome.scm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index b07c2dbb05..d768a0a348 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -141,6 +141,7 @@
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
+  #:use-module (gnu packages php)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages popt)
@@ -3702,8 +3703,7 @@ libxml to ease remote use of the RESTful API.")
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
        ("vala" ,vala)
-       ;; These are needed for the tests.
-       ;; FIXME: Add PHP once available.
+       ("php" ,php)
        ("curl" ,curl)
        ("gnutls" ,gnutls)                         ;for 'certtool'
        ("httpd" ,httpd)))
-- 
2.26.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.3: 0002-gnu-Add-libsoup-minimal.patch --]
[-- Type: text/x-patch, Size: 1705 bytes --]

From 989b4169c38751e3056e0dad3e571e9939aa5bf8 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Wed, 8 Jan 2020 21:57:33 -0500
Subject: [PATCH 02/14] gnu: Add libsoup-minimal.

* gnu/packages/gnome.scm (libsoup-minimal): New variable.
---
 gnu/packages/gnome.scm | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index d768a0a348..f252fac978 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -179,6 +179,7 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu artwork)
+  #:use-module ((guix build utils) #:select (modify-phases))
   #:use-module (guix build-system cargo)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
@@ -3725,6 +3726,22 @@ libxml to ease remote use of the RESTful API.")
 and the GLib main loop, to integrate well with GNOME applications.")
     (license license:lgpl2.0+)))
 
+
+;;; A minimal version of libsoup used to prevent a cycle with Inkscape.
+(define-public libsoup-minimal
+  (package
+    (inherit libsoup)
+    (name "libsoup-minimal")
+    (outputs (delete "doc" (package-outputs libsoup)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments libsoup)
+       ((#:configure-flags configure-flags)
+        `(delete "-Dgtk_doc=true" ,configure-flags))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'move-doc)))))
+    (native-inputs (alist-delete "gtk-doc" (package-native-inputs libsoup)))))
+
 (define-public libsecret
   (package
     (name "libsecret")
-- 
2.26.2


[-- Attachment #1.4: 0003-gnu-Add-at-spi2-atk-minimal.patch --]
[-- Type: text/x-patch, Size: 1809 bytes --]

From 0c935e1d6c6ecafc625f08537fd43a4fc32c5036 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Wed, 8 Jan 2020 23:18:17 -0500
Subject: [PATCH 03/14] gnu: Add at-spi2-atk-minimal.

* gnu/packages/gtk.scm (at-spi2-atk-minimal): New variable.
---
 gnu/packages/gtk.scm | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index f375ca9b82..822177afb1 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -24,6 +24,7 @@
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -650,6 +651,24 @@ is part of the GNOME accessibility project.")
    (license license:lgpl2.0+)
    (home-page "https://projects.gnome.org/accessibility/")))
 
+;;; A minimal variant used to prevent a cycle with Inkscape.
+(define at-spi2-core-minimal
+  (package
+    (inherit at-spi2-core)
+    (name "at-spi2-core-minimal")
+    (outputs (delete "doc" (package-outputs at-spi2-core)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments at-spi2-core)
+       ((#:configure-flags configure-flags)
+        `(delete "-Ddocs=true" ,configure-flags))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'set-documentation-path)
+           (delete 'prepare-doc-directory)
+           (delete 'move-documentation)))))
+    (native-inputs
+     (alist-delete "gtk-doc" (package-native-inputs at-spi2-core)))))
+
 (define-public at-spi2-atk
   (package
    (name "at-spi2-atk")
-- 
2.26.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.5: 0004-gnu-at-spi2-atk-Use-at-spi2-core-minimal-to-break-a-.patch --]
[-- Type: text/x-patch, Size: 1080 bytes --]

From 444a257bffe92af6cdc6c371f21a7a9cf2a11d98 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Wed, 8 Jan 2020 23:19:09 -0500
Subject: [PATCH 04/14] gnu: at-spi2-atk: Use at-spi2-core-minimal to break a
 cycle.

This breaks a cycle between Inkscape 1.0 and gtk+.

* gnu/packages/gtk.scm (at-spi2-atk)[propagated-inputs]: Replace at-spi2-core
by its minimal variant.
---
 gnu/packages/gtk.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 822177afb1..930cbf11d3 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -691,7 +691,7 @@ is part of the GNOME accessibility project.")
                    (setenv "DBUS_FATAL_WARNINGS" "0")
                    (invoke "dbus-launch" "meson" "test"))))))
    (propagated-inputs
-    `(("at-spi2-core" ,at-spi2-core))) ; required by atk-bridge-2.0.pc
+    `(("at-spi2-core" ,at-spi2-core-minimal))) ; required by atk-bridge-2.0.pc
    (inputs
     `(("atk" ,atk)))
    (native-inputs
-- 
2.26.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.6: 0005-gnu-Add-gdl.patch --]
[-- Type: text/x-patch, Size: 2654 bytes --]

From ea5b9fd34629b97e1ddbc8420bb04cd811eb6a17 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Thu, 9 Jan 2020 23:01:24 -0500
Subject: [PATCH 05/14] gnu: Add gdl.

* gnu/packages/gnome.scm (gdl): New variable.
---
 gnu/packages/gnome.scm | 47 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index f252fac978..6ce08f2f2d 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1489,6 +1489,53 @@ accessing key stores.  It also provides the viewer for crypto files on the
 GNOME Desktop.")
     (license license:lgpl2.1+)))
 
+(define-public gdl
+  (package
+    (name "gdl")
+    (version "3.34.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.gnome.org/GNOME/gdl.git")
+                    (commit (string-append "GDL_" (string-map (match-lambda
+                                                                (#\. #\_)
+                                                                (c c))
+                                                              version)))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "154qcr0x6f68f4q526y87imv0rscmp34n47nk1pp82rsq52h2zna"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _
+             ;; The autogen.sh script in gnome-common will run ./configure
+             ;; by default, which is problematic because source shebangs
+             ;; have not yet been patched.
+             (setenv "NOCONFIGURE" "t")
+             (invoke "sh" "autogen.sh"))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
+       ("gnome-common" ,gnome-common)
+       ("gtk-doc" ,gtk-doc)
+       ("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)
+       ("libtool" ,libtool)
+       ("which" ,which)))
+    (inputs
+     `(("libxml2" ,libxml2)))
+    (propagated-inputs
+     ;; The gdl-3.0.pc file 'Requires' GTK+.
+     `(("gtk+" ,gtk+)))
+    (home-page "https://gitlab.gnome.org/GNOME/gdl/")
+    (synopsis "GNOME docking library")
+    (description "This library provides docking features for gtk+.")
+    (license license:lgpl2.1+)))
+
 (define-public libgnome-keyring
   (package
     (name "libgnome-keyring")
-- 
2.26.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.7: 0006-gnu-Add-gdl-minimal.patch --]
[-- Type: text/x-patch, Size: 1558 bytes --]

From 51b7cf2b908daf472d415a5417afd6e3e94f7e9e Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Thu, 9 Jan 2020 23:01:59 -0500
Subject: [PATCH 06/14] gnu: Add gdl-minimal.

* gnu/packages/gnome.scm (gdl-minimal): New variable.
---
 gnu/packages/gnome.scm | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 6ce08f2f2d..1c5148cbaf 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1536,6 +1536,27 @@ GNOME Desktop.")
     (description "This library provides docking features for gtk+.")
     (license license:lgpl2.1+)))
 
+;;; A minimal variant used to break a cycle with Inkscape.
+(define-public gdl-minimal
+  (package
+    (inherit gdl)
+    (name "gdl-minimal")
+    (arguments
+     (substitute-keyword-arguments (package-arguments gdl)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'disable-doc-generation
+             ;; XXX: There is no easy way to disable generating the
+             ;; documentation.
+             (lambda _
+               (substitute* "configure.in"
+                 (("GTK_DOC_CHECK.*") "")
+                 (("docs/.*") ""))
+               (substitute* "Makefile.am"
+                 (("gdl docs po") "gdl po"))
+               #t))))))
+    (native-inputs (alist-delete "gtk-doc" (package-native-inputs gdl)))))
+
 (define-public libgnome-keyring
   (package
     (name "libgnome-keyring")
-- 
2.26.2


[-- Attachment #1.8: 0007-gnu-Add-lib2geom.patch --]
[-- Type: text/x-patch, Size: 14919 bytes --]

From b0bcda4147930348ff8c0321c062f8fca4d32b00 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Tue, 14 Jan 2020 23:20:31 -0500
Subject: [PATCH 07/14] gnu: Add lib2geom.

* gnu/packages/graphics.scm (lib2geom): New variable.
* gnu/packages/patches/lib2geom-enable-assertions.patch,
lib2geom-link-tests-against-glib.patch,
lib2geom-use-system-googletest.patch: New files.
* gnu/local.mk (dist_patch_DATA): Register new patches.
---
 gnu/local.mk                                  |  5 +-
 gnu/packages/graphics.scm                     | 79 ++++++++++++++++
 .../patches/lib2geom-enable-assertions.patch  | 36 +++++++
 .../lib2geom-link-tests-against-glib.patch    | 34 +++++++
 .../lib2geom-use-system-googletest.patch      | 94 +++++++++++++++++++
 5 files changed, 247 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/lib2geom-enable-assertions.patch
 create mode 100644 gnu/packages/patches/lib2geom-link-tests-against-glib.patch
 create mode 100644 gnu/packages/patches/lib2geom-use-system-googletest.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index be02f93ec7..ba9f9728b2 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -19,7 +19,7 @@
 # Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
 # Copyright © 2018, 2019, 2020 Oleg Pykhalov <go.wigust@gmail.com>
 # Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com>
-# Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+# Copyright © 2018, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 # Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 # Copyright © 2019 John Soo <jsoo1@asu.edu>
 # Copyright © 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
@@ -1150,6 +1150,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/ldc-disable-phobos-tests.patch		\
   %D%/packages/patches/leela-zero-gtest.patch			\
   %D%/packages/patches/less-hurd-path-max.patch			\
+  %D%/packages/patches/lib2geom-enable-assertions.patch		\
+  %D%/packages/patches/lib2geom-link-tests-against-glib.patch	\
+  %D%/packages/patches/lib2geom-use-system-googletest.patch	\
   %D%/packages/patches/liba52-enable-pic.patch			\
   %D%/packages/patches/liba52-link-with-libm.patch		\
   %D%/packages/patches/liba52-set-soname.patch			\
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 16ab9d20a4..6f022e9d79 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -21,6 +21,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -61,6 +62,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages jemalloc)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
@@ -328,6 +330,83 @@ quaternions and other useful 2D and 3D math functions.  Iex is an
 exception-handling library.")
     (license license:bsd-3)))
 
+(define-public lib2geom
+  ;; Use the latest master commit, as the 1.0 release suffer build problems.
+  (let ((revision "1")
+        (commit "42e119d94934a9514c61571cfb6b4af503ece082"))
+    (package
+      (name "lib2geom")
+      (version (git-version "1.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.com/inkscape/lib2geom.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "195rs0kdbs8w62irha1nwy83bccz04wglmk578qrj1mky7fc4rjv"))
+                (patches
+                 ;; Patch submitted to upstream (see:
+                 ;; https://gitlab.com/inkscape/lib2geom/merge_requests/17).
+                 (search-patches "lib2geom-enable-assertions.patch"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(begin
+                    ;; Fix py2geom module initialization (see:
+                    ;; https://gitlab.com/inkscape/lib2geom/merge_requests/18).
+                    (substitute* "src/py2geom/__init__.py"
+                      (("_py2geom") "py2geom._py2geom"))
+                    #t))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:imported-modules ((guix build python-build-system)
+                             ,@%cmake-build-system-modules)
+         #:configure-flags '("-D2GEOM_BUILD_SHARED=ON"
+                             "-D2GEOM_BOOST_PYTHON=ON"
+                             ;; Compiling the Cython bindings fail (see:
+                             ;; https://gitlab.com/inkscape/lib2geom/issues/21).
+                             "-D2GEOM_CYTHON_BINDINGS=OFF")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-python-lib-install-path
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((python-version (@ (guix build python-build-system)
+                                         python-version))
+                      (python-maj-min-version (python-version
+                                               (assoc-ref inputs "python")))
+                      (site-package (string-append
+                                     (assoc-ref outputs "out")
+                                     "/lib/python" python-maj-min-version
+                                     "/site-packages")))
+                 (substitute* '("src/cython/CMakeLists.txt"
+                                "src/py2geom/CMakeLists.txt")
+                   (("PYTHON_LIB_INSTALL \"[^\"]*\"")
+                    (format #f "PYTHON_LIB_INSTALL ~s" site-package))))
+               #t)))))
+      (native-inputs `(("python" ,python-wrapper)
+                       ("googletest" ,googletest)
+                       ("pkg-config" ,pkg-config)))
+      (inputs `(("cairo" ,cairo)
+                ("pycairo" ,python-pycairo)
+                ("double-conversion" ,double-conversion)
+                ("glib" ,glib)
+                ("gsl" ,gsl)))
+      (propagated-inputs
+       `(("boost" ,boost)))             ;referred to in 2geom/pathvector.h.
+      (home-page "https://gitlab.com/inkscape/lib2geom/")
+      (synopsis "C++ 2D graphics library")
+      (description "2geom is a C++ library of mathematics for paths, curves,
+and other geometric calculations.  Designed for vector graphics, it tackles
+Bézier curves, conic sections, paths, intersections, transformations, and
+basic geometries.")
+      ;; The actual license differs from the advertised license, as linking
+      ;; with the GNU Scientif GSL is GPLv3+ means the whole must be licensed
+      ;; under a GPLv3+ compatible license, which the advertised LGPLv2.1+ or
+      ;; MPLv1.1 aren't (see: https://gitlab.com/inkscape/lib2geom/issues/3
+      ;; and https://gitlab.com/inkscape/inkscape/issues/784).
+      (license license:gpl3+))))
+
 (define-public ogre
   (package
     (name "ogre")
diff --git a/gnu/packages/patches/lib2geom-enable-assertions.patch b/gnu/packages/patches/lib2geom-enable-assertions.patch
new file mode 100644
index 0000000000..8feb44acbf
--- /dev/null
+++ b/gnu/packages/patches/lib2geom-enable-assertions.patch
@@ -0,0 +1,36 @@
+From 4aa78f52232682b353eb15c219171e466987bac7 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Thu, 16 Jan 2020 00:19:29 -0500
+Subject: [PATCH] build: Enable assertions for the RelWithDebugInfo build type.
+
+This fixes issue #5 (see:
+https://gitlab.com/inkscape/lib2geom/issues/5).
+
+* CMakeLists.txt: Remove the "-DNDEBUG" CXX flag from the default
+configuration for the RelWithDebugInfo build type.
+---
+ CMakeLists.txt | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bfeb8f03..a663a1b0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -19,6 +19,14 @@ enable_testing()
+ 
+ include(CheckCXXSourceCompiles)
+ 
++# Enable assertions for the RelWithDebugInfo build type.  This is
++# useful as some tests make use of it (see:
++# https://gitlab.com/inkscape/lib2geom/issues/5).
++if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
++  string(REPLACE "-DNDEBUG" ""
++    CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
++endif()
++
+ # Find dependencies
+ find_package(Boost 1.40 REQUIRED)
+ find_package(DoubleConversion REQUIRED)
+-- 
+2.24.1
+
diff --git a/gnu/packages/patches/lib2geom-link-tests-against-glib.patch b/gnu/packages/patches/lib2geom-link-tests-against-glib.patch
new file mode 100644
index 0000000000..2b4f7ca6bf
--- /dev/null
+++ b/gnu/packages/patches/lib2geom-link-tests-against-glib.patch
@@ -0,0 +1,34 @@
+From f95925afef451755fc1449e57fbfdc2e7277f4b4 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Sat, 11 Jan 2020 00:44:55 -0500
+Subject: [PATCH 1/3] tests: Link against GLib.
+
+This resolves an error about not finding <glib.h> when linking the
+tests that make use of GLib.
+
+* src/tests/CMakeLists.txt[2GEOM_GTESTS_SRC]: Add the glib library to
+the link target libraries.
+---
+ src/tests/CMakeLists.txt | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
+index 5ddf7f9c..626cfd87 100644
+--- a/src/tests/CMakeLists.txt
++++ b/src/tests/CMakeLists.txt
+@@ -32,8 +32,10 @@ sbasis-test
+ 
+ foreach(source ${2GEOM_GTESTS_SRC})
+ 	add_executable(${source} ${source}.cpp)
+-	target_include_directories(${source} PRIVATE ${GSL_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS})
+-	target_link_libraries(${source} 2geom gtest_main gtest ${GSL_LIBRARIES} ${GTK3_LIBRARIES})
++	target_include_directories(${source} PRIVATE ${GSL_INCLUDE_DIRS}
++	  ${GTK3_INCLUDE_DIRS} ${GLIB_INCLUDE_DIRS})
++	target_link_libraries(${source} 2geom gtest_main gtest ${GSL_LIBRARIES}
++	  ${GTK3_LIBRARIES} ${GLIB_LIBRARIES})
+ 	add_test(NAME ${source} COMMAND ${source})
+ endforeach()
+ 
+-- 
+2.24.1
+
diff --git a/gnu/packages/patches/lib2geom-use-system-googletest.patch b/gnu/packages/patches/lib2geom-use-system-googletest.patch
new file mode 100644
index 0000000000..16cce1799f
--- /dev/null
+++ b/gnu/packages/patches/lib2geom-use-system-googletest.patch
@@ -0,0 +1,94 @@
+From 6693b9c8ff1ae1ec02c9002c0a8f5f416f0c88f0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Sun, 12 Jan 2020 23:23:33 -0500
+Subject: [PATCH 3/3] build: Prefer googletest from the system.
+
+Fixes issue #4.
+
+The build system now look for a system installed googletest or falls
+back to the bundled copy of googletest otherwise.
+
+* CMakeLists.txt: Add call to find_package(GTest).
+(include_directories): Remove "src/googletest/googletest/include" from
+arg.
+* src/CMakeLists.txt[NOT GTEST_FOUND]: Define the gtest and gtest_main
+libraries when GTEST_FOUND is false.  Globally include the googletest
+headers here.  Define aliases for the gtest and gtest_main libraries
+that match those defined by the FindGTest module.
+* src/tests/CMakeLists.txt: Replace references to gtest_main and gtest
+by GTest::Main and GTest::GTest, respectively.
+---
+ CMakeLists.txt           |  3 ++-
+ src/CMakeLists.txt       | 15 +++++++++++----
+ src/tests/CMakeLists.txt |  6 +++---
+ 3 files changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bfeb8f03..96fbd58c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -25,13 +25,14 @@ find_package(DoubleConversion REQUIRED)
+ find_package(PkgConfig REQUIRED)
+ find_package(Cython)
+ find_package(Threads)
++find_package(GTest)
+ pkg_check_modules(GTK3 gtk+-3.0)
+ pkg_check_modules(GLIB glib-2.0)
+ pkg_check_modules(CAIRO cairo)
+ pkg_check_modules(GSL gsl)
+ 
+ # Add global include and link directories
+-include_directories(src src/googletest/googletest/include ${CMAKE_CURRENT_BINARY_DIR})
++include_directories(src ${CMAKE_CURRENT_BINARY_DIR})
+ link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/2geom)
+ 
+ check_cxx_source_compiles("#include <math.h>\nint main() { double a=0.5,b=0.5,c=0.5; sincos(a, &b, &c); return 0; }" HAVE_SINCOS)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index eefb3ac5..941dc4c7 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -1,7 +1,14 @@
+-add_library(gtest SHARED googletest/googletest/src/gtest-all.cc)
+-target_include_directories(gtest PRIVATE googletest/googletest)
+-target_link_libraries(gtest Threads::Threads)
+-add_library(gtest_main STATIC googletest/googletest/src/gtest_main.cc)
++if(NOT GTEST_FOUND)
++  message("No system googletest library: using bundled copy.")
++  add_library(gtest SHARED googletest/googletest/src/gtest-all.cc)
++  add_library(gtest_main STATIC googletest/googletest/src/gtest_main.cc)
++  target_include_directories(gtest PRIVATE googletest/googletest)
++  target_link_libraries(gtest Threads::Threads)
++  include_directories(SYSTEM googletest/googletest/include)
++  # Aliases to share the same nomenclature with FindGTest.
++  add_library(GTest::GTest ALIAS gtest)
++  add_library(GTest::Main ALIAS gtest_main)
++endif()
+ 
+ add_subdirectory(2geom)
+ add_subdirectory(tests)
+diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
+index 626cfd87..3538f8cf 100644
+--- a/src/tests/CMakeLists.txt
++++ b/src/tests/CMakeLists.txt
+@@ -34,15 +34,15 @@ foreach(source ${2GEOM_GTESTS_SRC})
+ 	add_executable(${source} ${source}.cpp)
+ 	target_include_directories(${source} PRIVATE ${GSL_INCLUDE_DIRS}
+ 	  ${GTK3_INCLUDE_DIRS} ${GLIB_INCLUDE_DIRS})
+-	target_link_libraries(${source} 2geom gtest_main gtest ${GSL_LIBRARIES}
+-	  ${GTK3_LIBRARIES} ${GLIB_LIBRARIES})
++	target_link_libraries(${source} 2geom GTest::Main GTest::GTest
++	  ${GSL_LIBRARIES} ${GTK3_LIBRARIES} ${GLIB_LIBRARIES})
+ 	add_test(NAME ${source} COMMAND ${source})
+ endforeach()
+ 
+ foreach(source ${2GEOM_TESTS_SRC})
+     add_executable(${source} ${source}.cpp)
+     target_include_directories(${source} PRIVATE ${GSL_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS})
+-    target_link_libraries(${source} 2geom gtest ${GSL_LIBRARIES} ${GTK3_LIBRARIES})
++    target_link_libraries(${source} 2geom GTest::GTest ${GSL_LIBRARIES} ${GTK3_LIBRARIES})
+     add_test(NAME ${source} COMMAND ${source})
+ endforeach(source)
+ 
+-- 
+2.24.1
+
-- 
2.26.2


[-- Attachment #1.9: 0008-gnu-plotutils-Build-libplotter.patch --]
[-- Type: text/x-patch, Size: 5010 bytes --]

From 926c4b5def384fcdd03a7939a6765068fb0100e7 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Fri, 24 Jan 2020 23:13:46 -0500
Subject: [PATCH 08/14] gnu: plotutils: Build libplotter.

* gnu/packages/plotutils.scm (plotutils)[origin]: Port the patch to a snippet,
which catches all the problematic occurrences.
[configure-flags]: Pass "--enable-libplotter".
[description]: Mention the newly added C++ libplotter library.
---
 gnu/local.mk                                  |  1 -
 .../patches/plotutils-libpng-jmpbuf.patch     | 23 ------------------
 gnu/packages/plotutils.scm                    | 24 ++++++++++++-------
 3 files changed, 15 insertions(+), 33 deletions(-)
 delete mode 100644 gnu/packages/patches/plotutils-libpng-jmpbuf.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index ba9f9728b2..86efba5d2d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1369,7 +1369,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/plink-endian-detection.patch		\
   %D%/packages/patches/plib-CVE-2011-4620.patch		\
   %D%/packages/patches/plib-CVE-2012-4552.patch		\
-  %D%/packages/patches/plotutils-libpng-jmpbuf.patch		\
   %D%/packages/patches/podofo-cmake-3.12.patch			\
   %D%/packages/patches/portaudio-audacity-compat.patch		\
   %D%/packages/patches/portmidi-modular-build.patch		\
diff --git a/gnu/packages/patches/plotutils-libpng-jmpbuf.patch b/gnu/packages/patches/plotutils-libpng-jmpbuf.patch
deleted file mode 100644
index 07ef60996c..0000000000
--- a/gnu/packages/patches/plotutils-libpng-jmpbuf.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Use the `png_jmpbuf' accessor, as recommended since libpng 1.4.0:
-http://www.libpng.org/pub/png/src/libpng-1.2.x-to-1.4.x-summary.txt .
-
---- plotutils-2.6/libplot/z_write.c	2013-07-12 17:19:12.000000000 +0200
-+++ plotutils-2.6/libplot/z_write.c	2013-07-12 17:19:07.000000000 +0200
-@@ -164,7 +164,7 @@ _pl_z_maybe_output_image (S___(Plotter *
-     }
- 
-   /* cleanup after libpng errors (error handler does a longjmp) */
--  if (setjmp (png_ptr->jmpbuf))
-+  if (setjmp (png_jmpbuf (png_ptr)))
-     {
-       png_destroy_write_struct (&png_ptr, (png_info **)NULL);
-       return -1;
-@@ -444,7 +444,7 @@ _our_error_fn_stdio (png_struct *png_ptr
- #endif
-     }
- 
--  longjmp (png_ptr->jmpbuf, 1);
-+  longjmp (png_jmpbuf (png_ptr), 1);
- }
- 
- static void 
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index a1e32eb398..15a310b5fe 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -56,7 +57,6 @@
              (sha256
               (base32
                "1arkyizn5wbgvbh53aziv3s6lmd3wm9lqzkhxb3hijlp1y124hjg"))
-             (patches (search-patches "plotutils-libpng-jmpbuf.patch"))
              (modules '((guix build utils)))
              (snippet
               ;; Force the use of libXaw7 instead of libXaw.  When not doing
@@ -67,22 +67,28 @@
                  (substitute* "configure"
                    (("-lXaw")
                     "-lXaw7"))
+                 ;; Use the `png_jmpbuf' accessor, as recommended since libpng
+                 ;; 1.4.0 (see:
+                 ;; http://www.libpng.org/pub/png/src/libpng-1.2.x-to-1.4.x-summary.txt).
+                 (substitute* "libplot/z_write.c"
+                   (("png_ptr->jmpbuf")
+                    "png_jmpbuf (png_ptr)"))
                  #t))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--enable-libplotter")))
     (inputs `(("libpng" ,libpng)
               ("libx11" ,libx11)
               ("libxt" ,libxt)
               ("libxaw" ,libxaw)))
-
-    (home-page
-     "https://www.gnu.org/software/plotutils/")
+    (home-page "https://www.gnu.org/software/plotutils/")
     (synopsis "Plotting utilities and library")
     (description
-     "GNU Plotutils is a package for plotting and working with 2D graphics. 
-It includes a library, \"libplot\", for C and C++ for exporting 2D vector
-graphics in many file formats.  It also has support for 2D vector graphics
-animations.  The package also contains command-line programs for plotting
-scientific data.")
+     "GNU Plotutils is a package for plotting and working with 2D graphics.
+It includes the C library @code{libplot} and the C++ @code{libplotter} library
+for exporting 2D vector graphics in many file formats.  It also has support
+for 2D vector graphics animations.  The package also contains command-line
+programs for plotting scientific data.")
     (license license:gpl2+)))
 
 (define-public guile-charting
-- 
2.26.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.10: 0009-gnu-Add-pstoedit.patch --]
[-- Type: text/x-patch, Size: 2539 bytes --]

From 6a8afe75604b2150ef1656f4d6e8fc884f8b437f Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Fri, 24 Jan 2020 23:40:38 -0500
Subject: [PATCH 09/14] gnu: Add pstoedit.

* gnu/packages/graphics.scm (pstoedit): New variable.
---
 gnu/packages/graphics.scm | 40 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 6f022e9d79..777ad837b4 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -68,6 +68,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages plotutils)
   #:use-module (gnu packages pth)
   #:use-module (gnu packages pulseaudio)  ; libsndfile, libsamplerate
   #:use-module (gnu packages python)
@@ -407,6 +408,45 @@ basic geometries.")
       ;; and https://gitlab.com/inkscape/inkscape/issues/784).
       (license license:gpl3+))))
 
+(define-public pstoedit
+  (package
+    (name "pstoedit")
+    (version "3.75")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/pstoedit/pstoedit/"
+                                  version "/pstoedit-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1kv46g2wsvsvcngkavxl5gnw3l6g5xqnh4kmyx4b39a01d8xiddp"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("ghostscript" ,ghostscript)
+       ("imagemagick" ,imagemagick)
+       ("libplot" ,plotutils)
+       ("libjpeg" ,libjpeg-turbo)
+       ("zlib" ,zlib)))               ;else libp2edrvmagick++.so fails to link
+    (home-page "http://www.pstoedit.net/")
+    (synopsis "Converter for PostScript and PDF graphics")
+    (description "The @code{pstoedit} utility allows translating graphics
+in the PostScript or PDF (Portable Document Format) formats to various
+other vector formats such as:
+@itemize
+@item Tgif (.obj)
+@item gnuplot
+@item xfig (.fig)
+@item Flattened PostScript
+@item DXF, a CAD (Computed-Aided Design) exchange format
+@item PIC (for troff/groff)
+@item MetaPost (for usage with TeX/LaTeX)
+@item LaTeX2e picture
+@item GNU Metafile (for use with plotutils/libplot)
+@item Any format supported by ImageMagick
+@end itemize")
+    (license license:gpl2+)))
+
 (define-public ogre
   (package
     (name "ogre")
-- 
2.26.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.11: 0010-gnu-Add-autotrace.patch --]
[-- Type: text/x-patch, Size: 3844 bytes --]

From bcc629985280d9421d72d7e57b96c1f7202b5dec Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Sat, 25 Jan 2020 00:33:14 -0500
Subject: [PATCH 10/14] gnu: Add autotrace.

* gnu/packages/graphics.scm (autotrace): New variable.
---
 gnu/packages/graphics.scm | 57 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 777ad837b4..208e2a521c 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -43,6 +43,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
@@ -52,6 +53,7 @@
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -146,6 +148,61 @@ objects!")
     (home-page "http://www.fox-toolkit.org")
     (license license:lgpl2.1+)))
 
+(define-public autotrace
+  (let ((commit "travis-20190624.59")
+        (version-base "0.40.0"))
+    (package
+      (name "autotrace")
+      (version (string-append version-base "-"
+                              (if (string-prefix? "travis-" commit)
+                                  (string-drop commit 7)
+                                  commit)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/autotrace/autotrace.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0mk4yavy42dj0pszr1ggnggpvmzs4ds46caa9wr55cqsypn7bq6s"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    ;; See: https://github.com/autotrace/autotrace/issues/27.
+                    (add-after 'unpack 'include-spline.h-header
+                      (lambda _
+                        (substitute* "Makefile.am"
+                          ((".*src/types.h.*" all)
+                           (string-append all "\t\tsrc/spline.h \\\n")))
+                        #t))
+                    ;; See: https://github.com/autotrace/autotrace/issues/26.
+                    (replace 'check
+                      (lambda _
+                        (invoke "sh" "tests/runtests.sh"))))))
+      (native-inputs
+       `(("which" ,which)
+         ("pkg-config" ,pkg-config)
+         ("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("intltool" ,intltool)
+         ("libtool" ,libtool)
+         ("gettext" ,gettext-minimal)))
+      (inputs
+       `(("glib" ,glib)
+         ("libjpeg" ,libjpeg-turbo)
+         ("libpng" ,libpng)
+         ("imagemagick" ,imagemagick)
+         ("pstoedit" ,pstoedit)))
+      (home-page "https://github.com/autotrace/autotrace")
+      (synopsis "Bitmap to vector graphics converter")
+      (description "AutoTrace is a utility for converting bitmap into vector
+graphics.  It can trace outlines and midlines, effect color reduction or
+despeckling and has support for many input and output formats.  It can be used
+with the @command{autotrace} utility or as a C library, @code{libautotrace}.")
+      (license (list license:gpl2+         ;for the utility itself
+                     license:lgpl2.1+))))) ;for use as a library
+
 (define-public blender
   (package
     (name "blender")
-- 
2.26.2


[-- Attachment #1.12: 0011-gnu-Add-drm-tools.patch --]
[-- Type: text/x-patch, Size: 6110 bytes --]

From f8773c2a7fa27b070d48ba04a726fa6f6f1fb2da Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Tue, 28 Jan 2020 00:15:29 -0500
Subject: [PATCH 11/14] gnu: Add drm-tools.

* gnu/packages/textutils.scm (drm-tools): New variable.
---
 gnu/packages/textutils.scm | 106 +++++++++++++++++++++++++++++++++++++
 1 file changed, 106 insertions(+)

diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index 62988ec574..8e74963b49 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -19,6 +19,7 @@
 ;;; Copyright © 2019 Yoshinori Arai <kumagusu08@gmail.com>
 ;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -53,6 +54,7 @@
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages java)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -717,6 +719,110 @@ categories.")
     (license (list license:lgpl2.1         ; Main distribution.
                    license:asl1.1))))      ; src/readdir.{c,h}
 
+(define-public drm-tools
+  (package
+    (name "drm-tools")
+    (version "1.1.32")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/drmtools/drm_tools-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0nky82mm9rgsvw1xxw1nh0jz7r3k4l4b0wdqvynka0h1vn82wj91"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ;the test suite fails
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'set-install-prefixes
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out")))
+                        (substitute* "CMakeLists.txt"
+                          (("tmp/testinstall")
+                           (string-drop out 1))
+                          (("/man/man1")
+                           "/share/man/man1"))
+                        #t)))
+                  (add-after 'unpack 'adjust-test-paths
+                    (lambda _
+                      (substitute* '("test_extract_increment.sh"
+                                     "test_extract_features.sh"
+                                     "test_extract_features2.sh"
+                                     "test_dmath.sh")
+                        (("\\./extract") "extract")
+                        (("\\./dmath") "dmath")
+                        (("/usr/local/bin/") "")
+                        (("/bin/rm") "rm")
+                        (("/bin/cp") "cp"))
+                      #t))
+                  (delete 'check)
+                  ;; The produced binaries are written directly to %output/bin.
+                  (delete 'install)
+                  (add-after 'build 'check
+                    (lambda* (#:key outputs tests? #:allow-other-keys)
+                      (when tests?
+                        (let* ((out (assoc-ref outputs "out"))
+                               (bin (string-append out "/bin")))
+                          (setenv "PATH" (string-append bin ":"
+                                                        (getenv "PATH")))
+                          (with-directory-excursion
+                              (format #f "../drm_tools-~a" ,version)
+                            (invoke "sh" "test_all.sh")))))))))
+    (native-inputs `(("which" ,which))) ;for tests
+    (inputs `(("pcre" ,pcre)))
+    (home-page "http://drmtools.sourceforge.net/")
+    (synopsis "Utilities to manipulate text and binary files")
+    (description "The drm_tools package contains the following commands:
+@table @command
+@item accudate
+An extended version of the \"date\" program that has sub-second accuracy.
+@item binformat
+Format complex binary data into text.
+@item binload
+Load data into a binary file using simple commands from the input.
+@item binorder
+Sort, merge, search, retrieve or generate test data consisting of fixed size
+binary records.
+@item binreplace
+Find or find/replace in binary files.
+@item binsplit
+Split test data consisting of fixed size binary records into one or more
+output streams.
+@item chardiff
+Find changes between two files at the character level.  Unlike \"diff\", it
+lists just the characters that differ, so if the 40,000th character is
+different only that one character will be shown, not the entire line.
+@item columnadd
+Add columns of integers, decimals, and/or times.
+@item datasniffer
+A utility for formatting binary data dumps.
+@item dmath
+Double precision interactive command line math calculator.
+@item extract
+Extract and emit data from text files based on character or token position.
+@item execinput
+A utility that reads from STDIN and executes each line as a command in a
+sub-process.
+@item indexed_text
+A utility for rapid retrieval of text by line numbers, in any order, from a
+text file.
+@item mdump
+Format binary data.
+@item msgqueue
+Create message queues and send/receive messages.
+@item mbin
+@itemx mbout
+Multiple buffer in and out.  Used for buffering a lot of data between a slow
+device and a fast device.  Mostly for buffering streaming tape drives for use
+with slower network connections, so that streaming is maintained as much as
+possible to minimize wear on the tape device.
+@item pockmark
+Corrupt data streams - useful for testing error correction and data recovery.
+@item tarsieve
+Filter, list, or split a tar file.
+@end table")
+    (license license:gpl2+)))
+
 (define-public java-rsyntaxtextarea
   (package
     (name "java-rsyntaxtextarea")
-- 
2.26.2


[-- Attachment #1.13: 0012-gnu-Add-libuemf.patch --]
[-- Type: text/x-patch, Size: 3590 bytes --]

From 586c0ea29f3533e7b2cb558ecf1dfea82d12dfae Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Tue, 28 Jan 2020 01:21:24 -0500
Subject: [PATCH 12/14] gnu: Add libuemf.

* gnu/packages/image.scm (libuemf): New variable.
---
 gnu/packages/image.scm | 51 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index c6fc26f9b8..d6afd96e3b 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -25,6 +25,7 @@
 ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,6 +75,7 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages textutils)
   #:use-module (gnu packages video)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
@@ -856,6 +858,55 @@ compose, and analyze GIF images.")
     (home-page "http://giflib.sourceforge.net/")
     (license license:x11)))
 
+(define-public libuemf
+  (package
+    (name "libuemf")
+    (version "0.2.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/libuemf/libUEMF-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "05djs99vqf067x81xfpskh7a66y5x7b4mmjavybcy7swnm0swg7v"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Overriding CMAKE_INSTALL_PREFIX is not a good idea.
+         (add-after 'unpack 'fix-CMakeLists.txt
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               ((".*SET\\(CMAKE_INSTALL_PREFIX.*") ""))
+             #t))
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (sources (string-append "../libUEMF-" ,version))
+                    (drm-tools (assoc-ref inputs "drm-tools"))
+                    (extract (string-append drm-tools "/bin/extract"))
+                    (execinput (string-append drm-tools "/bin/execinput")))
+               (with-directory-excursion sources
+                 (substitute* "testit.sh"
+                   (("^EPATH=.*")
+                    (format #f "EPATH=~a~%" bin))
+                   (("`which diff`")
+                    "diff")
+                   (("^EXTRACT=.*")
+                    (format #f "EXTRACT=~a~%" extract))
+                   (("^EXECINPUT=.*")
+                    (format #f "EXECINPUT=~a~%" execinput)))
+                 (invoke "sh" "testit.sh"))))))))
+    (native-inputs `(("drm-tools" ,drm-tools))) ;for tests
+    (home-page "http://libuemf.sourceforge.net/")
+    (synopsis "Library for working with WFM, EMF and EMF+ images")
+    (description "The libUEMF library is a portable C99 implementation for
+reading and writing @abbr{WFM, Windows Metafile}, @abbr{EMF, Enhanced
+Metafile}, and @abbr{EMF+, Enhanced Metafile Plus} files.")
+    (license license:gpl2+)))
+
 (define-public libungif
   (package
     (name "libungif")
-- 
2.26.2


[-- Attachment #1.14: 0013-gnu-inkscape-Update-to-1.0.patch --]
[-- Type: text/x-patch, Size: 14724 bytes --]

From 70e1a1e89145b99aab6ba118da23a996af445107 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Mon, 6 Jan 2020 16:37:44 -0500
Subject: [PATCH 13/14] gnu: inkscape: Update to 1.0.

* gnu/packages/inkscape.scm (inkscape)[version]: Update to 1.0.
[origin]: Remove the obsolete Poppler patch.  Add a macro to remove bundled
libraries where possible.
[inputs]: Upgrade gtk+-2 and gtkmm-2 to their current version.  Add autotrace,
gdl-minimal, lib2geom, libjpeg and libsoup.  Upgrade python-2 to its current
version, and move it...
[native-inputs]: ...here.  Add imagemagick and googletest.
[arguments]: Enable tests, specifying the test target as "check".  Move the
check phase after the install phase.  Remove the obsoleted
adjust-for-new-poppler phase.  Add a set-home phase to quiet Inkscape
warnings.  Add a disable-latex-export-tests phase to skip failing tests.
[license]: Change to GPLv3+, although upstream says GPLv2+, due to an
unresolved license incompatibility when building with the external lib2geom
library.
* gnu/packages/patches/inkscape-poppler-0.76.patch: Delete file.
* gnu/local.mk: Unregister it.
---
 gnu/local.mk                                  |   1 -
 gnu/packages/inkscape.scm                     | 187 ++++++++++++++----
 .../patches/inkscape-poppler-0.76.patch       |  36 ----
 3 files changed, 148 insertions(+), 76 deletions(-)
 delete mode 100644 gnu/packages/patches/inkscape-poppler-0.76.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 86efba5d2d..da8ac7c130 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1089,7 +1089,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
   %D%/packages/patches/ilmbase-openexr-pkg-config.patch		\
   %D%/packages/patches/inetutils-hurd.patch			\
-  %D%/packages/patches/inkscape-poppler-0.76.patch		\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/irrlicht-use-system-libs.patch		\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index 26d4642547..803f58a8cb 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,8 +31,12 @@
   #:use-module (gnu packages aspell)
   #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pdf)
@@ -46,64 +51,168 @@
 (define-public inkscape
   (package
     (name "inkscape")
-    (version "0.92.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://media.inkscape.org/dl/"
-                                  "resources/file/"
-                                  "inkscape-" version ".tar.bz2"))
-              (patches (search-patches "inkscape-poppler-0.76.patch"))
-              (sha256
-               (base32
-                "0pjinhjibfsz1aywdpgpj3k23xrsszpj4a1ya5562dkv2yl2vv2p"))))
+    (version "1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://media.inkscape.org/dl/"
+                           "resources/file/"
+                           "inkscape-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1fwl7yjkykqb86555k4fm24inhc40mrvxqwgl2v2vi9alv8j7hc9"))
+       (modules '((guix build utils)
+                  (ice-9 format)))
+       (snippet
+        '(begin
+           (let-syntax
+               ;; XXX: The build system doesn't currently support using
+               ;; system libraries over bundled ones (see:
+               ;; https://gitlab.com/inkscape/inkscape/issues/876).
+               ((unbundle
+                 (syntax-rules ()
+                   ((_ (name source-dir use-pkg-config?) ...)
+                    (begin
+                      ;; Delete bundled source directories.
+                      (delete-file-recursively source-dir) ...
+                      (substitute* '("src/CMakeLists.txt"
+                                     "src/3rdparty/CMakeLists.txt")
+                        (((string-append ".*add_subdirectory\\("
+                                         (basename source-dir) "\\).*"))
+                         "") ...)
+                      ;; Remove bundled entries from INKSCAPE_TARGET_LIBS.
+                      (substitute* "src/CMakeLists.txt"
+                        (((string-append name "_LIB.*")) "") ...)
+                      ;; Register the external libraries, so that their
+                      ;; headers are added to INKSCAPE_INCS_SYS and their
+                      ;; shared libraries added to INKSCAPE_LIBS.
+                      (if use-pkg-config?
+                          (let* ((width (string-length "pkg_check_modules("))
+                                 (indent (string-join (make-list width " ") "")))
+                            (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
+                              (("^pkg_check_modules\\(INKSCAPE_DEP REQUIRED.*" start)
+                               (string-append start
+                                              (format #f "~a~a~%" indent name)))))
+                          (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
+                            (("^find_package\\(Iconv REQUIRED\\).*" start)
+                             (string-append (format #f "
+find_path(~a_INCLUDE_DIR NAMES ~:*~a/~:*~a.h ~:*~a.h)
+if(NOT ~:*~a_INCLUDE_DIR)
+  message(FATAL_ERROR \"~:*~a headers not found\")
+else()
+  list(APPEND INKSCAPE_INCS_SYS ${~:*~a_INCLUDE_DIR})
+endif()
+
+find_library(~:*~a_LIB NAMES ~:*~a)
+if(NOT ~:*~a_LIB)
+  message(FATAL_ERROR \"~:*~a library not found\")
+else()
+  list(APPEND INKSCAPE_LIBS ~:*~a_LIB)
+endif()~%~%"
+                                                    name)
+                                            start)))) ...
+                      ;; Fix the references to the headers of the
+                      ;; unbundled libraries.
+                      (substitute* (find-files "." "\\.h$|\\.cpp$")
+                        (((string-append "#include (\"|<)3rdparty/"
+                                         (basename source-dir)) _ quote)
+                         (string-append "#include " quote
+                                        (basename source-dir)))
+                        ...))))))
+             (unbundle ("2geom" "src/2geom" #t)
+                       ;; libcroco cannot be unbundled as it is heavily
+                       ;; modified (see:
+                       ;; https://gitlab.com/inkscape/inkscape/issues/876#note_276114904).
+                       ;; ("croco" "src/3rdparty/libcroco" #t)
+                       ;; FIXME: Unbundle the following libraries once they
+                       ;; have been packaged.
+                       ;; ("cola" "src/3rdparty/adaptagrams/libcola")
+                       ;; ("avoid" "src/3rdparty/adaptagrams/libavoid")
+                       ;; ("vpsc" "src/3rdparty/adaptagrams/libvpsc")
+                       ;; libuemf cannot be unbundled as it slightly modified
+                       ;; from upstream (see:
+                       ;; https://gitlab.com/inkscape/inkscape/issues/973).
+                       ;; ("uemf" "src/3rdparty/libuemf" #f)
+                       ;; FIXME: libdepixelize upstream is ancient and doesn't
+                       ;; build with a recent lib2geom
+                       ;; (see: https://bugs.launchpad.net/libdepixelize/+bug/1862458).
+                       ;;("depixelize" "src/3rdparty/libdepixelize")
+                       ("autotrace" "src/3rdparty/autotrace" #t)))
+           ;; Lift the requirement on the double-conversion library, as
+           ;; it is only needed by lib2geom, which is now unbundled.
+           (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
+             ((".*find_package\\(DoubleConversion.*") ""))
+           #t))))
     (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #t
+       #:test-target "check"            ;otherwise some test binaries are missing
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-icon-cache-generator
+           (lambda _
+             (substitute* "share/icons/application/CMakeLists.txt"
+               (("gtk-update-icon-cache") "true"))
+             #t))
+         (add-after 'unpack 'disable-latex-export-tests
+           ;; FIXME: For some reason the test.pdf_tex file generated by the
+           ;; "--export-latex" lacks "some text" in its content when run in
+           ;; the build environment.  Skip the related tests.
+           (lambda _
+             (substitute* "testfiles/cli_tests/CMakeLists.txt"
+               (("add_cli_test\\(export-latex")
+                "message(TEST_DISABLED: export-latex"))
+             #t))
+         (add-after 'unpack 'set-home
+           ;; Mute Inkscape warnings during tests.
+           (lambda _
+             (setenv "HOME" (getcwd))
+             (format #t "ARGS is set to: ~a" (getenv "ARGS"))
+             #t))
+         ;; Move the check phase after the install phase, as when run in the
+         ;; tests, Inkscape relies on files that are not yet installed, such
+         ;; as the "share/inkscape/ui/units.xml" file.
+         (delete 'check)
+         (add-after 'install 'check
+           (assoc-ref %standard-phases 'check)))))
     (inputs
      `(("aspell" ,aspell)
-       ("gtkmm" ,gtkmm-2)
-       ("gtk" ,gtk+-2)
+       ("autotrace" ,autotrace)
+       ("gdl" ,gdl-minimal)
+       ("gtkmm" ,gtkmm)
+       ("gtk" ,gtk+)
        ("gsl" ,gsl)
        ("poppler" ,poppler)
+       ;;("libcroco" ,libcroco) ;see comment in origin snippet above
+       ("lib2geom" ,lib2geom)
+       ;; ("libdepixelize" ,libdepixelize) ;build is currently broken
+       ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)
+       ;;("libuemf" ,libuemf)  ;see comment in origin snippet above
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
        ("libgc" ,libgc)
+       ("libsoup" ,libsoup-minimal)
        ("freetype" ,freetype)
        ("popt" ,popt)
        ("potrace" ,potrace)
-       ("python" ,python-2)
        ("lcms" ,lcms)
        ("boost" ,boost)))
     (native-inputs
-     `(("intltool" ,intltool)
+     `(("imagemagick" ,imagemagick)     ;for tests
+       ("intltool" ,intltool)
        ("glib" ,glib "bin")
+       ("googletest" ,googletest)
        ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
-    ;; FIXME: tests require gmock
-    (arguments
-     `(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-icon-cache-generator
-           (lambda _
-             (substitute* "share/icons/application/CMakeLists.txt"
-              (("gtk-update-icon-cache") "true"))
-             #t))
-         (add-after 'unpack 'adjust-for-new-poppler
-           (lambda _
-             (substitute* (find-files "src/extension/internal/pdfinput")
-               ;; Needed for Poppler 0.82.
-               (("Unicode \\*u") "Unicode const *u")
-               ;; Needed for Poppler 0.83.
-               (("\\(GfxPath") "(const GfxPath")
-               (("GfxSubpath") "const GfxSubpath")
-               (("new GlobalParams\\(\\)")
-                "std::unique_ptr<GlobalParams>(new GlobalParams())")
-               (("new GlobalParams\\(poppler_datadir\\)")
-                "std::unique_ptr<GlobalParams>(new GlobalParams(poppler_datadir))"))
-             #t)))))
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
     (home-page "https://inkscape.org/")
     (synopsis "Vector graphics editor")
     (description "Inkscape is a vector graphics editor.  What sets Inkscape
 apart is its use of Scalable Vector Graphics (SVG), an XML-based W3C standard,
 as the native format.")
-    (license license:gpl2+)))
+    ;; The external, unbundled lib2geom library effective license is GPLv3+,
+    ;; given it links against the GNU Scientific Library, which in turn means
+    ;; that the license of Inkscape should also be GPLv3+, when built this way
+    ;; (see: https://gitlab.com/inkscape/inkscape/issues/784).
+    (license license:gpl3+)))
diff --git a/gnu/packages/patches/inkscape-poppler-0.76.patch b/gnu/packages/patches/inkscape-poppler-0.76.patch
deleted file mode 100644
index 08e8303892..0000000000
--- a/gnu/packages/patches/inkscape-poppler-0.76.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-This patch adds support for Poppler 0.76 and later.
-
-Taken from upstream:
-<https://gitlab.com/inkscape/inkscape/commit/e831b034746f8dc3c3c1b88372751f6dcb974831>
-
-diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
-index 8484984bdf..4f798e35bf 100644
---- a/src/extension/internal/pdfinput/pdf-parser.cpp
-+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
-@@ -421,7 +421,7 @@ void PdfParser::parse(Object *obj, GBool topLevel) {
- 	error(errInternal, -1, "Weird page contents");
-     	return;
-   }
--  parser = new Parser(xref, new Lexer(xref, obj), gFalse);
-+  parser = new _POPPLER_NEW_PARSER(xref, obj);
-   go(topLevel);
-   delete parser;
-   parser = nullptr;
-diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
-index 61a15083a0..5e8bc4ae90 100644
---- a/src/extension/internal/pdfinput/poppler-transition-api.h
-+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
-@@ -14,6 +14,13 @@
- 
- #include <glib/poppler-features.h>
- 
-+#if POPPLER_CHECK_VERSION(0, 76, 0)
-+#define _POPPLER_NEW_PARSER(xref, obj) Parser(xref, obj, gFalse)
-+#else
-+#define _POPPLER_NEW_PARSER(xref, obj) Parser(xref, new Lexer(xref, obj), gFalse)
-+#endif
-+
-+
- #if POPPLER_CHECK_VERSION(0, 72, 0)
- #define getCString c_str
- #endif
-- 
2.26.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.15: 0014-gnu-WIP-Add-libdepixelize.patch --]
[-- Type: text/x-patch, Size: 4505 bytes --]

From 3853fb03cbd15ab84a6744cb8f65231e5702b0e1 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Thu, 6 Feb 2020 00:13:06 -0500
Subject: [PATCH 14/14] gnu: WIP: Add libdepixelize.

WIP: This currently fails to build.  We need to figure out which ancient
version of lib2geom it needs to link against.

* gnu/packages/graphics.scm (libdepixelize): New variable.
---
 gnu/packages/graphics.scm | 67 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 208e2a521c..d27440dfea 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -71,6 +71,7 @@
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages plotutils)
+  #:use-module (gnu packages popt)
   #:use-module (gnu packages pth)
   #:use-module (gnu packages pulseaudio)  ; libsndfile, libsamplerate
   #:use-module (gnu packages python)
@@ -87,6 +88,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix bzr-download)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
   #:use-module ((guix licenses) #:prefix license:)
@@ -465,6 +467,71 @@ basic geometries.")
       ;; and https://gitlab.com/inkscape/inkscape/issues/784).
       (license license:gpl3+))))
 
+;;; This older version of 2geom is used by libpixelize.
+(define-public lib2geom-0.9
+  (package
+    (inherit lib2geom)
+    (name "lib2geom")
+    (version "0.9")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/inkscape/lib2geom.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1zfb9mkggn36pxyp04z67dvj7r0vqfdw8yy2a41zg7rlcw5v6v67"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (delete-file-recursively "src/googletest")
+                  ;; Fix py2geom module initialization (see:
+                  ;; https://gitlab.com/inkscape/lib2geom/merge_requests/18).
+                  (substitute* "src/py2geom/__init__.py"
+                    (("_py2geom") "py2geom._py2geom"))
+                  ;; Disable toys and tests, as they cause build issues.
+                  (substitute* "src/CMakeLists.txt"
+                    ((".*ADD_SUBDIRECTORY \\(.*tests\\).*") "")
+                    ((".*ADD_SUBDIRECTORY \\(toys\\).*") "")
+                    ((".*gtest.*") ""))
+                  #t))))))
+
+(define-public libdepixelize
+  (let ((revision "187")                ;no tags or official releases
+        (guix-revision "1"))
+    (package
+      (name "libdepixelize")
+      (version (string-append "0.0.0-" guix-revision "." revision))
+      (source (origin
+                (method bzr-fetch)
+                (uri (bzr-reference
+                      (url (string-append "lp:" name))
+                      (revision revision)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "19znvam2d2bya05d9sxcj37lnrnvj9c0403aa2p5fv60985xi5b9"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    (add-after 'unpack 'patch-sources
+                      (lambda _
+                        (substitute* "src/priv/splines-kopf2011.h"
+                          ((".*dest\\.pathVector\\.reserve.*") ""))
+                        #t)))))
+      (native-inputs `(("pkg-config" ,pkg-config)))
+      (inputs `(("gtkmm" ,gtkmm-2)
+                ("lib2geom" ,lib2geom-0.9)
+                ("popt" ,popt)))
+      (home-page "https://launchpad.net/libdepixelize")
+      (synopsis "C++ library for vectorizing raster graphics")
+      (description "Depixelize is a library (and utility) for converting
+raster graphics into vector graphics.  It implements the algorithm described in
+@url{https://johanneskopf.de/publications/pixelart/paper/pixel.pdf,Depixelizing
+Pixel Art}.")
+      (license (list license:gpl2+ license:lgpl2.1+))))) ;dual licensed
+
 (define-public pstoedit
   (package
     (name "pstoedit")
-- 
2.26.2


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH V2] gnu: inkscape: Update to 1.0.
  2020-05-07  3:23 [bug#41118] [PATCH] gnu: inkscape: Update to 1.0 Maxim Cournoyer
@ 2020-05-07  4:37 ` Maxim Cournoyer
  2020-05-07 15:20 ` [bug#41118] [PATCH] " Leo Famulari
  2020-05-07 15:27 ` Leo Famulari
  2 siblings, 0 replies; 13+ messages in thread
From: Maxim Cournoyer @ 2020-05-07  4:37 UTC (permalink / raw)
  To: 41118; +Cc: Leo Famulari

[-- Attachment #1: Type: text/plain, Size: 213 bytes --]

Hi again,

Here's a v2 for the Inkscape 1.0 patch.  It adds a couple optional
dependencies that are nice to have.  Thanks to Nicolò Balzarotti who
shared another Inkscape 1.0 patch on guix-devel.

Maxim


[-- Attachment #2: 0013_V2-gnu-inkscape-Update-to-1.0.patch --]
[-- Type: text/x-patch, Size: 14957 bytes --]

From 30e39891c1e502bc325ce3d853d91238f5f61ca7 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Mon, 6 Jan 2020 16:37:44 -0500
Subject: [PATCH] gnu: inkscape: Update to 1.0.

* gnu/packages/inkscape.scm (inkscape)[version]: Update to 1.0.
[origin]: Remove the obsolete Poppler patch.  Add a macro to remove bundled
libraries where possible.
[inputs]: Upgrade gtk+-2 and gtkmm-2 to their current version.  Add autotrace,
gdl-minimal, lib2geom, libjpeg, libsoup, gtkspell3, libcdr, libwpd, libwpg and
libvisio.  Upgrade python-2 to its current version, and move it...
[native-inputs]: ...here.  Add imagemagick and googletest.
[arguments]: Enable tests, specifying the test target as "check".  Move the
check phase after the install phase.  Remove the obsoleted
adjust-for-new-poppler phase.  Add a set-home phase to quiet Inkscape
warnings.  Add a disable-latex-export-tests phase to skip failing tests.
[license]: Change to GPLv3+, although upstream says GPLv2+, due to an
unresolved license incompatibility when building with the external lib2geom
library.
* gnu/packages/patches/inkscape-poppler-0.76.patch: Delete file.
* gnu/local.mk: Unregister it.
---
 gnu/local.mk                                  |   1 -
 gnu/packages/inkscape.scm                     | 193 ++++++++++++++----
 .../patches/inkscape-poppler-0.76.patch       |  36 ----
 3 files changed, 154 insertions(+), 76 deletions(-)
 delete mode 100644 gnu/packages/patches/inkscape-poppler-0.76.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 86efba5d2d..da8ac7c130 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1089,7 +1089,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
   %D%/packages/patches/ilmbase-openexr-pkg-config.patch		\
   %D%/packages/patches/inetutils-hurd.patch			\
-  %D%/packages/patches/inkscape-poppler-0.76.patch		\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/irrlicht-use-system-libs.patch		\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index 26d4642547..65d6e5687b 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,8 +31,13 @@
   #:use-module (gnu packages aspell)
   #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pdf)
@@ -46,64 +52,173 @@
 (define-public inkscape
   (package
     (name "inkscape")
-    (version "0.92.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://media.inkscape.org/dl/"
-                                  "resources/file/"
-                                  "inkscape-" version ".tar.bz2"))
-              (patches (search-patches "inkscape-poppler-0.76.patch"))
-              (sha256
-               (base32
-                "0pjinhjibfsz1aywdpgpj3k23xrsszpj4a1ya5562dkv2yl2vv2p"))))
+    (version "1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://media.inkscape.org/dl/"
+                           "resources/file/"
+                           "inkscape-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1fwl7yjkykqb86555k4fm24inhc40mrvxqwgl2v2vi9alv8j7hc9"))
+       (modules '((guix build utils)
+                  (ice-9 format)))
+       (snippet
+        '(begin
+           (let-syntax
+               ;; XXX: The build system doesn't currently support using
+               ;; system libraries over bundled ones (see:
+               ;; https://gitlab.com/inkscape/inkscape/issues/876).
+               ((unbundle
+                 (syntax-rules ()
+                   ((_ (name source-dir use-pkg-config?) ...)
+                    (begin
+                      ;; Delete bundled source directories.
+                      (delete-file-recursively source-dir) ...
+                      (substitute* '("src/CMakeLists.txt"
+                                     "src/3rdparty/CMakeLists.txt")
+                        (((string-append ".*add_subdirectory\\("
+                                         (basename source-dir) "\\).*"))
+                         "") ...)
+                      ;; Remove bundled entries from INKSCAPE_TARGET_LIBS.
+                      (substitute* "src/CMakeLists.txt"
+                        (((string-append name "_LIB.*")) "") ...)
+                      ;; Register the external libraries, so that their
+                      ;; headers are added to INKSCAPE_INCS_SYS and their
+                      ;; shared libraries added to INKSCAPE_LIBS.
+                      (if use-pkg-config?
+                          (let* ((width (string-length "pkg_check_modules("))
+                                 (indent (string-join (make-list width " ") "")))
+                            (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
+                              (("^pkg_check_modules\\(INKSCAPE_DEP REQUIRED.*" start)
+                               (string-append start
+                                              (format #f "~a~a~%" indent name)))))
+                          (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
+                            (("^find_package\\(Iconv REQUIRED\\).*" start)
+                             (string-append (format #f "
+find_path(~a_INCLUDE_DIR NAMES ~:*~a/~:*~a.h ~:*~a.h)
+if(NOT ~:*~a_INCLUDE_DIR)
+  message(FATAL_ERROR \"~:*~a headers not found\")
+else()
+  list(APPEND INKSCAPE_INCS_SYS ${~:*~a_INCLUDE_DIR})
+endif()
+
+find_library(~:*~a_LIB NAMES ~:*~a)
+if(NOT ~:*~a_LIB)
+  message(FATAL_ERROR \"~:*~a library not found\")
+else()
+  list(APPEND INKSCAPE_LIBS ~:*~a_LIB)
+endif()~%~%"
+                                                    name)
+                                            start)))) ...
+                      ;; Fix the references to the headers of the
+                      ;; unbundled libraries.
+                      (substitute* (find-files "." "\\.h$|\\.cpp$")
+                        (((string-append "#include (\"|<)3rdparty/"
+                                         (basename source-dir)) _ quote)
+                         (string-append "#include " quote
+                                        (basename source-dir)))
+                        ...))))))
+             (unbundle ("2geom" "src/2geom" #t)
+                       ;; libcroco cannot be unbundled as it is heavily
+                       ;; modified (see:
+                       ;; https://gitlab.com/inkscape/inkscape/issues/876#note_276114904).
+                       ;; ("croco" "src/3rdparty/libcroco" #t)
+                       ;; FIXME: Unbundle the following libraries once they
+                       ;; have been packaged.
+                       ;; ("cola" "src/3rdparty/adaptagrams/libcola")
+                       ;; ("avoid" "src/3rdparty/adaptagrams/libavoid")
+                       ;; ("vpsc" "src/3rdparty/adaptagrams/libvpsc")
+                       ;; libuemf cannot be unbundled as it slightly modified
+                       ;; from upstream (see:
+                       ;; https://gitlab.com/inkscape/inkscape/issues/973).
+                       ;; ("uemf" "src/3rdparty/libuemf" #f)
+                       ;; FIXME: libdepixelize upstream is ancient and doesn't
+                       ;; build with a recent lib2geom
+                       ;; (see: https://bugs.launchpad.net/libdepixelize/+bug/1862458).
+                       ;;("depixelize" "src/3rdparty/libdepixelize")
+                       ("autotrace" "src/3rdparty/autotrace" #t)))
+           ;; Lift the requirement on the double-conversion library, as
+           ;; it is only needed by lib2geom, which is now unbundled.
+           (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
+             ((".*find_package\\(DoubleConversion.*") ""))
+           #t))))
     (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #t
+       #:test-target "check"            ;otherwise some test binaries are missing
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-icon-cache-generator
+           (lambda _
+             (substitute* "share/icons/application/CMakeLists.txt"
+               (("gtk-update-icon-cache") "true"))
+             #t))
+         (add-after 'unpack 'disable-latex-export-tests
+           ;; FIXME: For some reason the test.pdf_tex file generated by the
+           ;; "--export-latex" lacks "some text" in its content when run in
+           ;; the build environment.  Skip the related tests.
+           (lambda _
+             (substitute* "testfiles/cli_tests/CMakeLists.txt"
+               (("add_cli_test\\(export-latex")
+                "message(TEST_DISABLED: export-latex"))
+             #t))
+         (add-after 'unpack 'set-home
+           ;; Mute Inkscape warnings during tests.
+           (lambda _
+             (setenv "HOME" (getcwd))
+             (format #t "ARGS is set to: ~a" (getenv "ARGS"))
+             #t))
+         ;; Move the check phase after the install phase, as when run in the
+         ;; tests, Inkscape relies on files that are not yet installed, such
+         ;; as the "share/inkscape/ui/units.xml" file.
+         (delete 'check)
+         (add-after 'install 'check
+           (assoc-ref %standard-phases 'check)))))
     (inputs
      `(("aspell" ,aspell)
-       ("gtkmm" ,gtkmm-2)
-       ("gtk" ,gtk+-2)
+       ("autotrace" ,autotrace)
+       ("gdl" ,gdl-minimal)
+       ("gtkmm" ,gtkmm)
+       ("gtk" ,gtk+)
+       ("gtkspell3" ,gtkspell3)
        ("gsl" ,gsl)
        ("poppler" ,poppler)
+       ;;("libcroco" ,libcroco) ;see comment in origin snippet above
+       ("lib2geom" ,lib2geom)
+       ;; ("libdepixelize" ,libdepixelize) ;build is currently broken
+       ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)
+       ;;("libuemf" ,libuemf)  ;see comment in origin snippet above
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
        ("libgc" ,libgc)
+       ("libsoup" ,libsoup-minimal)
+       ("libcdr" ,libcdr)
+       ("libvisio" ,libvisio)
+       ("libwpd" ,libwpd)
+       ("libwpg" ,libwpg)
        ("freetype" ,freetype)
        ("popt" ,popt)
        ("potrace" ,potrace)
-       ("python" ,python-2)
        ("lcms" ,lcms)
        ("boost" ,boost)))
     (native-inputs
-     `(("intltool" ,intltool)
+     `(("imagemagick" ,imagemagick)     ;for tests
+       ("intltool" ,intltool)
        ("glib" ,glib "bin")
+       ("googletest" ,googletest)
        ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
-    ;; FIXME: tests require gmock
-    (arguments
-     `(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-icon-cache-generator
-           (lambda _
-             (substitute* "share/icons/application/CMakeLists.txt"
-              (("gtk-update-icon-cache") "true"))
-             #t))
-         (add-after 'unpack 'adjust-for-new-poppler
-           (lambda _
-             (substitute* (find-files "src/extension/internal/pdfinput")
-               ;; Needed for Poppler 0.82.
-               (("Unicode \\*u") "Unicode const *u")
-               ;; Needed for Poppler 0.83.
-               (("\\(GfxPath") "(const GfxPath")
-               (("GfxSubpath") "const GfxSubpath")
-               (("new GlobalParams\\(\\)")
-                "std::unique_ptr<GlobalParams>(new GlobalParams())")
-               (("new GlobalParams\\(poppler_datadir\\)")
-                "std::unique_ptr<GlobalParams>(new GlobalParams(poppler_datadir))"))
-             #t)))))
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
     (home-page "https://inkscape.org/")
     (synopsis "Vector graphics editor")
     (description "Inkscape is a vector graphics editor.  What sets Inkscape
 apart is its use of Scalable Vector Graphics (SVG), an XML-based W3C standard,
 as the native format.")
-    (license license:gpl2+)))
+    ;; The external, unbundled lib2geom library effective license is GPLv3+,
+    ;; given it links against the GNU Scientific Library, which in turn means
+    ;; that the license of Inkscape should also be GPLv3+, when built this way
+    ;; (see: https://gitlab.com/inkscape/inkscape/issues/784).
+    (license license:gpl3+)))
diff --git a/gnu/packages/patches/inkscape-poppler-0.76.patch b/gnu/packages/patches/inkscape-poppler-0.76.patch
deleted file mode 100644
index 08e8303892..0000000000
--- a/gnu/packages/patches/inkscape-poppler-0.76.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-This patch adds support for Poppler 0.76 and later.
-
-Taken from upstream:
-<https://gitlab.com/inkscape/inkscape/commit/e831b034746f8dc3c3c1b88372751f6dcb974831>
-
-diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
-index 8484984bdf..4f798e35bf 100644
---- a/src/extension/internal/pdfinput/pdf-parser.cpp
-+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
-@@ -421,7 +421,7 @@ void PdfParser::parse(Object *obj, GBool topLevel) {
- 	error(errInternal, -1, "Weird page contents");
-     	return;
-   }
--  parser = new Parser(xref, new Lexer(xref, obj), gFalse);
-+  parser = new _POPPLER_NEW_PARSER(xref, obj);
-   go(topLevel);
-   delete parser;
-   parser = nullptr;
-diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
-index 61a15083a0..5e8bc4ae90 100644
---- a/src/extension/internal/pdfinput/poppler-transition-api.h
-+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
-@@ -14,6 +14,13 @@
- 
- #include <glib/poppler-features.h>
- 
-+#if POPPLER_CHECK_VERSION(0, 76, 0)
-+#define _POPPLER_NEW_PARSER(xref, obj) Parser(xref, obj, gFalse)
-+#else
-+#define _POPPLER_NEW_PARSER(xref, obj) Parser(xref, new Lexer(xref, obj), gFalse)
-+#endif
-+
-+
- #if POPPLER_CHECK_VERSION(0, 72, 0)
- #define getCString c_str
- #endif
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-07  3:23 [bug#41118] [PATCH] gnu: inkscape: Update to 1.0 Maxim Cournoyer
  2020-05-07  4:37 ` [bug#41118] [PATCH V2] " Maxim Cournoyer
@ 2020-05-07 15:20 ` Leo Famulari
  2020-05-15 13:36   ` Maxim Cournoyer
  2020-05-07 15:27 ` Leo Famulari
  2 siblings, 1 reply; 13+ messages in thread
From: Leo Famulari @ 2020-05-07 15:20 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 41118

[-- Attachment #1: Type: text/plain, Size: 1422 bytes --]

On Wed, May 06, 2020 at 11:23:10PM -0400, Maxim Cournoyer wrote:
> The following updates Inkscape to its 1.0 version.  The test suite is
> enabled and an effort is made to unbundle as much of 3rd party libraries
> as possible (but more can be done, if you'd like to help: see the
> comments in the patch).
> 
> The last patch of the series (Add libdepixelize) is added as a WIP, and
> is included as a curiosity only (not intended to be merged in its
> current state).

Thanks!

Too bad about the licensing issues... it seems like it might be a while
before they are resolved upstream. I think it's not totally correct to
say that the license of lib2geom is effectively GPL3+. Only the
copyright-holders of lib2geom can say that, right? The licenses are
effectively incoherent and I'd say the software is not something we have
the right to distribute :/ I'm no expert, however.

I did notice that Inkscape's COPYING has addressed this issue for a few
years, due to some files from copied GIMP, and reads: "As such, the
complete binaries of Inkscape are currently covered by the terms of GNU
GPL version 3 or later." Given that, I guess we are only waiting on
lib2geom to make a decision?

I saw the bug report on Inkscape's GitLab page [0], but I'm wondering if
there was actually any public discussion upstream, like on a mailing
list?

[0] https://gitlab.com/inkscape/inkscape/-/issues/784

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-07  3:23 [bug#41118] [PATCH] gnu: inkscape: Update to 1.0 Maxim Cournoyer
  2020-05-07  4:37 ` [bug#41118] [PATCH V2] " Maxim Cournoyer
  2020-05-07 15:20 ` [bug#41118] [PATCH] " Leo Famulari
@ 2020-05-07 15:27 ` Leo Famulari
  2020-05-07 15:30   ` Leo Famulari
  2 siblings, 1 reply; 13+ messages in thread
From: Leo Famulari @ 2020-05-07 15:27 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 41118

[-- Attachment #1: Type: text/plain, Size: 409 bytes --]

On Wed, May 06, 2020 at 11:23:10PM -0400, Maxim Cournoyer wrote:
> The following updates Inkscape to its 1.0 version.  The test suite is
> enabled and an effort is made to unbundle as much of 3rd party libraries
> as possible (but more can be done, if you'd like to help: see the
> comments in the patch).

What commit do these patches apply to? I can't get patch 7 to apply to
either master or core-updates.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-07 15:27 ` Leo Famulari
@ 2020-05-07 15:30   ` Leo Famulari
  2020-05-28  3:34     ` Maxim Cournoyer
  0 siblings, 1 reply; 13+ messages in thread
From: Leo Famulari @ 2020-05-07 15:30 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 41118

[-- Attachment #1: Type: text/plain, Size: 277 bytes --]

On Thu, May 07, 2020 at 11:27:32AM -0400, Leo Famulari wrote:
> What commit do these patches apply to? I can't get patch 7 to apply to
> either master or core-updates.

Sorry, false alarm! I wasn't actually applying them to my core-updates
tree. They do apply on core-udpates.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-07 15:20 ` [bug#41118] [PATCH] " Leo Famulari
@ 2020-05-15 13:36   ` Maxim Cournoyer
  2020-05-15 14:43     ` Leo Famulari
  0 siblings, 1 reply; 13+ messages in thread
From: Maxim Cournoyer @ 2020-05-15 13:36 UTC (permalink / raw)
  To: Leo Famulari; +Cc: 41118

Hello Leo!

Leo Famulari <leo@famulari.name> writes:

> On Wed, May 06, 2020 at 11:23:10PM -0400, Maxim Cournoyer wrote:
>> The following updates Inkscape to its 1.0 version.  The test suite is
>> enabled and an effort is made to unbundle as much of 3rd party libraries
>> as possible (but more can be done, if you'd like to help: see the
>> comments in the patch).
>> 
>> The last patch of the series (Add libdepixelize) is added as a WIP, and
>> is included as a curiosity only (not intended to be merged in its
>> current state).
>
> Thanks!

Thanks for having a look.

> Too bad about the licensing issues... it seems like it might be a while
> before they are resolved upstream. I think it's not totally correct to
> say that the license of lib2geom is effectively GPL3+. Only the
> copyright-holders of lib2geom can say that, right? The licenses are
> effectively incoherent and I'd say the software is not something we have
> the right to distribute :/ I'm no expert, however.

You're probably right, that this needs to be sorted upstream first.

> I did notice that Inkscape's COPYING has addressed this issue for a few
> years, due to some files from copied GIMP, and reads: "As such, the
> complete binaries of Inkscape are currently covered by the terms of GNU
> GPL version 3 or later." Given that, I guess we are only waiting on
> lib2geom to make a decision?

Yes, it seems only inertia is preventing a move to GPL v3+ as a whole,
which would be much clearer, but in the meantime, there's at least that
bit of text which means it's safe to distribute Inkscape under the GPL
v3+ license.  Thanks for pointing that out to me!

> I saw the bug report on Inkscape's GitLab page [0], but I'm wondering if
> there was actually any public discussion upstream, like on a mailing
> list?

I've searched the mailing lists of both Inkscape and lib2geom, but
haven't found any recent discussion on the licensing topic.

> [0] https://gitlab.com/inkscape/inkscape/-/issues/784

I've attempted to stir up some action in that thread.  A comment was
made by one of the Inkscape developer on the matter, directed to another
Inkscape developer:

> If a license change from GPLv2+ to GPLv3+ (of the raw Inkscape code)
> is something you're actually interested in you should probably make a
> comparison of pros and cons of either license (i.e. why would we as a
> project as well as possible re-users profit from upgrading to GPLv3+?
> What would we loose?) and post it to the mailing list. I don't think
> anybody feels particularly strong about keeping GPLv2 in principle,
> but a lot of effort was put in to keep our codebase compatible with it
> in the past, so there's some hesitation to just "throw that away"
> without having good reasons for doing so.

This was made here: https://gitlab.com/inkscape/inkscape/-/issues/784.
If you have a good grasp of the GPL v2 vs GPL v3 merits, perhaps it'd be
useful to them to to post that there.  IIRC, I think the big new things
in GPL v3 were immunization to patent attacks (nice to have for
Inkscape) as well as preventing tivoization (this is not so applicable),
and clarifying that linking with GPL code means the whole should be GPL.
I'll re-read the licenses text in detail when I have a chance.

Anyway, if this doesn't move quickly enough, we could reluctantly build
Inkscape with its bundled lib2geom, which is a subset of the full
lib2geom and which doesn't link with GSL (IIRC).

Maxim




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-15 13:36   ` Maxim Cournoyer
@ 2020-05-15 14:43     ` Leo Famulari
  2020-05-16  3:53       ` Maxim Cournoyer
  0 siblings, 1 reply; 13+ messages in thread
From: Leo Famulari @ 2020-05-15 14:43 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 41118

On Fri, May 15, 2020 at 09:36:13AM -0400, Maxim Cournoyer wrote:
> This was made here: https://gitlab.com/inkscape/inkscape/-/issues/784.
> If you have a good grasp of the GPL v2 vs GPL v3 merits, perhaps it'd be
> useful to them to to post that there.  IIRC, I think the big new things
> in GPL v3 were immunization to patent attacks (nice to have for
> Inkscape) as well as preventing tivoization (this is not so applicable),
> and clarifying that linking with GPL code means the whole should be GPL.
> I'll re-read the licenses text in detail when I have a chance.
> 
> Anyway, if this doesn't move quickly enough, we could reluctantly build
> Inkscape with its bundled lib2geom, which is a subset of the full
> lib2geom and which doesn't link with GSL (IIRC).

In <https://gitlab.com/inkscape/inkscape/-/issues/784#note_343293612>
they seem to demonstrate a misunderstanding about lib2geom's license.
That commenter thinks that lib2geom is GPL2+, when it's actually
LGPL-2.1 or MPL-1.1.

However, gnu.org says that LGPL-2.1 is compatible with GPL2 and GPL3. So
maybe it's fine; I don't know. I think we should ask FSF for advice
<https://www.fsf.org/licensing>.




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-15 14:43     ` Leo Famulari
@ 2020-05-16  3:53       ` Maxim Cournoyer
  2020-05-16 11:05         ` Marius Bakke
  0 siblings, 1 reply; 13+ messages in thread
From: Maxim Cournoyer @ 2020-05-16  3:53 UTC (permalink / raw)
  To: Leo Famulari; +Cc: 41118

Hello Leo,

Leo Famulari <leo@famulari.name> writes:

> On Fri, May 15, 2020 at 09:36:13AM -0400, Maxim Cournoyer wrote:
>> This was made here: https://gitlab.com/inkscape/inkscape/-/issues/784.
>> If you have a good grasp of the GPL v2 vs GPL v3 merits, perhaps it'd be
>> useful to them to to post that there.  IIRC, I think the big new things
>> in GPL v3 were immunization to patent attacks (nice to have for
>> Inkscape) as well as preventing tivoization (this is not so applicable),
>> and clarifying that linking with GPL code means the whole should be GPL.
>> I'll re-read the licenses text in detail when I have a chance.
>> 
>> Anyway, if this doesn't move quickly enough, we could reluctantly build
>> Inkscape with its bundled lib2geom, which is a subset of the full
>> lib2geom and which doesn't link with GSL (IIRC).

Actually, this doesn't help with the licensing incompatibility, given
that Inkscape already depends on the GPL v3+ GNU Scientific Library
(GSL) and that the bundled lib2geom sources within Inkscape make use of
GSL.  I've pointed that here:
https://gitlab.com/inkscape/inkscape/-/issues/784#note_343667232.

> In <https://gitlab.com/inkscape/inkscape/-/issues/784#note_343293612>
> they seem to demonstrate a misunderstanding about lib2geom's license.
> That commenter thinks that lib2geom is GPL2+, when it's actually
> LGPL-2.1 or MPL-1.1.

I've brought this to their attention, thank you.

> However, gnu.org says that LGPL-2.1 is compatible with GPL2 and GPL3. So
> maybe it's fine; I don't know. I think we should ask FSF for advice
> <https://www.fsf.org/licensing>.

That's a good idea.

Maxim




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-16  3:53       ` Maxim Cournoyer
@ 2020-05-16 11:05         ` Marius Bakke
  2020-05-16 18:59           ` Maxim Cournoyer
  0 siblings, 1 reply; 13+ messages in thread
From: Marius Bakke @ 2020-05-16 11:05 UTC (permalink / raw)
  To: Maxim Cournoyer, Leo Famulari; +Cc: 41118

[-- Attachment #1: Type: text/plain, Size: 1576 bytes --]

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

> Hello Leo,
>
> Leo Famulari <leo@famulari.name> writes:
>
>> On Fri, May 15, 2020 at 09:36:13AM -0400, Maxim Cournoyer wrote:
>>> This was made here: https://gitlab.com/inkscape/inkscape/-/issues/784.
>>> If you have a good grasp of the GPL v2 vs GPL v3 merits, perhaps it'd be
>>> useful to them to to post that there.  IIRC, I think the big new things
>>> in GPL v3 were immunization to patent attacks (nice to have for
>>> Inkscape) as well as preventing tivoization (this is not so applicable),
>>> and clarifying that linking with GPL code means the whole should be GPL.
>>> I'll re-read the licenses text in detail when I have a chance.
>>> 
>>> Anyway, if this doesn't move quickly enough, we could reluctantly build
>>> Inkscape with its bundled lib2geom, which is a subset of the full
>>> lib2geom and which doesn't link with GSL (IIRC).
>
> Actually, this doesn't help with the licensing incompatibility, given
> that Inkscape already depends on the GPL v3+ GNU Scientific Library
> (GSL) and that the bundled lib2geom sources within Inkscape make use of
> GSL.  I've pointed that here:
> https://gitlab.com/inkscape/inkscape/-/issues/784#note_343667232.

What exactly is the license incompatibility?  As Leo points out,
LGPL2.1+ is compatible with GPL3.  Your initial assessment that the
entire works become GPL3+ seems correct to me.

GNU has a handy chart that shows compatibility between the various GNU
licenses: <https://www.gnu.org/licenses/gpl-faq.html#AllCompatibility>.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-16 11:05         ` Marius Bakke
@ 2020-05-16 18:59           ` Maxim Cournoyer
  0 siblings, 0 replies; 13+ messages in thread
From: Maxim Cournoyer @ 2020-05-16 18:59 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 41118, Leo Famulari

Hey Marius!

Marius Bakke <mbakke@fastmail.com> writes:

> Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
>
>> Hello Leo,
>>
>> Leo Famulari <leo@famulari.name> writes:
>>
>>> On Fri, May 15, 2020 at 09:36:13AM -0400, Maxim Cournoyer wrote:
>>>> This was made here: https://gitlab.com/inkscape/inkscape/-/issues/784.
>>>> If you have a good grasp of the GPL v2 vs GPL v3 merits, perhaps it'd be
>>>> useful to them to to post that there.  IIRC, I think the big new things
>>>> in GPL v3 were immunization to patent attacks (nice to have for
>>>> Inkscape) as well as preventing tivoization (this is not so applicable),
>>>> and clarifying that linking with GPL code means the whole should be GPL.
>>>> I'll re-read the licenses text in detail when I have a chance.
>>>> 
>>>> Anyway, if this doesn't move quickly enough, we could reluctantly build
>>>> Inkscape with its bundled lib2geom, which is a subset of the full
>>>> lib2geom and which doesn't link with GSL (IIRC).
>>
>> Actually, this doesn't help with the licensing incompatibility, given
>> that Inkscape already depends on the GPL v3+ GNU Scientific Library
>> (GSL) and that the bundled lib2geom sources within Inkscape make use of
>> GSL.  I've pointed that here:
>> https://gitlab.com/inkscape/inkscape/-/issues/784#note_343667232.
>
> What exactly is the license incompatibility?  As Leo points out,
> LGPL2.1+ is compatible with GPL3.  Your initial assessment that the
> entire works become GPL3+ seems correct to me.
>
> GNU has a handy chart that shows compatibility between the various GNU
> licenses:
> <https://www.gnu.org/licenses/gpl-faq.html#AllCompatibility>.

This helps! It indeed shows that's it's OK to copy code from a GPLv3+
project (link to) from a LGPL2.1+ code base, as long as the combined
work becomes GPLv3+.

What I wasn't sure, following the remark from Leo, was if this
permission was automatically granted to downstream users, without having
the upstream stating that yes, it indeed is OK to do so.

In retrospect, it would make sense that users are empowered to choose
the combination of their choice, as long as the effective license is
properly stated.  I just find it confusing that upstream says 'this is
LGPLv2+', when in reality the combined product is necessarily GPLv3+.

Thanks for tipping in, Marius!

Maxim




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-07 15:30   ` Leo Famulari
@ 2020-05-28  3:34     ` Maxim Cournoyer
  2020-05-28 13:39       ` Leo Famulari
  0 siblings, 1 reply; 13+ messages in thread
From: Maxim Cournoyer @ 2020-05-28  3:34 UTC (permalink / raw)
  To: Leo Famulari; +Cc: 41118

Hi Leo!

Leo Famulari <leo@famulari.name> writes:

> On Thu, May 07, 2020 at 11:27:32AM -0400, Leo Famulari wrote:
>> What commit do these patches apply to? I can't get patch 7 to apply to
>> either master or core-updates.
>
> Sorry, false alarm! I wasn't actually applying them to my core-updates
> tree. They do apply on core-udpates.

Did you have a chance to try this?  With the licensing issue resolved
(it's OK to license the combined works as GPLv3+ for both lib2geom and
Inkscape), I'll be looking to merge this while it's still relatively
fresh :-).

I'll leave it another week, then merge it to staging if no one objects.

Maxim




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [bug#41118] [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-28  3:34     ` Maxim Cournoyer
@ 2020-05-28 13:39       ` Leo Famulari
  2020-06-01  3:14         ` bug#41118: " Maxim Cournoyer
  0 siblings, 1 reply; 13+ messages in thread
From: Leo Famulari @ 2020-05-28 13:39 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 41118

On Wed, May 27, 2020 at 11:34:56PM -0400, Maxim Cournoyer wrote:
> Did you have a chance to try this?  With the licensing issue resolved
> (it's OK to license the combined works as GPLv3+ for both lib2geom and
> Inkscape), I'll be looking to merge this while it's still relatively
> fresh :-).

No, I didn't try it... if it works for you, I'm sure it's okay. I'd
check for post-release major bugs before pushing since it's probably
been well-tested in other distros.




^ permalink raw reply	[flat|nested] 13+ messages in thread

* bug#41118: [PATCH] gnu: inkscape: Update to 1.0.
  2020-05-28 13:39       ` Leo Famulari
@ 2020-06-01  3:14         ` Maxim Cournoyer
  0 siblings, 0 replies; 13+ messages in thread
From: Maxim Cournoyer @ 2020-06-01  3:14 UTC (permalink / raw)
  To: Leo Famulari; +Cc: 41118-done

Leo Famulari <leo@famulari.name> writes:

> On Wed, May 27, 2020 at 11:34:56PM -0400, Maxim Cournoyer wrote:
>> Did you have a chance to try this?  With the licensing issue resolved
>> (it's OK to license the combined works as GPLv3+ for both lib2geom and
>> Inkscape), I'll be looking to merge this while it's still relatively
>> fresh :-).
>
> No, I didn't try it... if it works for you, I'm sure it's okay. I'd
> check for post-release major bugs before pushing since it's probably
> been well-tested in other distros.

I've made some edits to simplify the wording of some comments, made sure
to not cause a rebuild of many packages, and pushed to master (staging
is currently frozen) as a second inkscape-1.0 package.

Thank you, I'm closing this.

Maxim




^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-06-01  3:15 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-07  3:23 [bug#41118] [PATCH] gnu: inkscape: Update to 1.0 Maxim Cournoyer
2020-05-07  4:37 ` [bug#41118] [PATCH V2] " Maxim Cournoyer
2020-05-07 15:20 ` [bug#41118] [PATCH] " Leo Famulari
2020-05-15 13:36   ` Maxim Cournoyer
2020-05-15 14:43     ` Leo Famulari
2020-05-16  3:53       ` Maxim Cournoyer
2020-05-16 11:05         ` Marius Bakke
2020-05-16 18:59           ` Maxim Cournoyer
2020-05-07 15:27 ` Leo Famulari
2020-05-07 15:30   ` Leo Famulari
2020-05-28  3:34     ` Maxim Cournoyer
2020-05-28 13:39       ` Leo Famulari
2020-06-01  3:14         ` bug#41118: " Maxim Cournoyer

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).