gnu: libretro-lowresnx: Update to 1.2.
[jackhill/guix/guix.git] / gnu / packages / inkscape.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
3 ;;; Copyright © 2014, 2016 Mark H Weaver <mhw@netris.org>
4 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
5 ;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
6 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
7 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
8 ;;; Copyright © 2020 Boris A. Dekshteyn <boris.dekshteyn@gmail.com>
9 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
10 ;;;
11 ;;; This file is part of GNU Guix.
12 ;;;
13 ;;; GNU Guix is free software; you can redistribute it and/or modify it
14 ;;; under the terms of the GNU General Public License as published by
15 ;;; the Free Software Foundation; either version 3 of the License, or (at
16 ;;; your option) any later version.
17 ;;;
18 ;;; GNU Guix is distributed in the hope that it will be useful, but
19 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ;;; GNU General Public License for more details.
22 ;;;
23 ;;; You should have received a copy of the GNU General Public License
24 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
25
26 (define-module (gnu packages inkscape)
27 #:use-module ((guix licenses) #:prefix license:)
28 #:use-module (guix packages)
29 #:use-module (guix download)
30 #:use-module (guix utils)
31 #:use-module (guix build-system cmake)
32 #:use-module (gnu packages)
33 #:use-module (gnu packages aspell)
34 #:use-module (gnu packages bdw-gc)
35 #:use-module (gnu packages boost)
36 #:use-module (gnu packages check)
37 #:use-module (gnu packages glib)
38 #:use-module (gnu packages gnome)
39 #:use-module (gnu packages graphics)
40 #:use-module (gnu packages gtk)
41 #:use-module (gnu packages imagemagick)
42 #:use-module (gnu packages libreoffice)
43 #:use-module (gnu packages maths)
44 #:use-module (gnu packages perl)
45 #:use-module (gnu packages pdf)
46 #:use-module (gnu packages popt)
47 #:use-module (gnu packages python)
48 #:use-module (gnu packages python-xyz)
49 #:use-module (gnu packages xml)
50 #:use-module (gnu packages ghostscript)
51 #:use-module (gnu packages fontutils)
52 #:use-module (gnu packages image)
53 #:use-module (gnu packages pkg-config))
54
55 (define-public inkscape
56 (package
57 (name "inkscape")
58 (version "0.92.4")
59 (source (origin
60 (method url-fetch)
61 (uri (string-append "https://media.inkscape.org/dl/"
62 "resources/file/"
63 "inkscape-" version ".tar.bz2"))
64 (patches (search-patches "inkscape-poppler-0.76.patch"))
65 (sha256
66 (base32
67 "0pjinhjibfsz1aywdpgpj3k23xrsszpj4a1ya5562dkv2yl2vv2p"))))
68 (build-system cmake-build-system)
69 (inputs
70 `(("aspell" ,aspell)
71 ("gtkmm" ,gtkmm-2)
72 ("gtk" ,gtk+-2)
73 ("gsl" ,gsl)
74 ("poppler" ,poppler)
75 ("libpng" ,libpng)
76 ("libxml2" ,libxml2)
77 ("libxslt" ,libxslt)
78 ("libgc" ,libgc)
79 ("freetype" ,freetype)
80 ("popt" ,popt)
81 ("potrace" ,potrace)
82 ("python" ,python-2)
83 ("lcms" ,lcms)
84 ("boost" ,boost)))
85 (native-inputs
86 `(("intltool" ,intltool)
87 ("glib" ,glib "bin")
88 ("perl" ,perl)
89 ("pkg-config" ,pkg-config)))
90 ;; FIXME: tests require gmock
91 (arguments
92 `(#:tests? #f
93 #:phases
94 (modify-phases %standard-phases
95 (add-after 'unpack 'patch-icon-cache-generator
96 (lambda _
97 (substitute* "share/icons/application/CMakeLists.txt"
98 (("gtk-update-icon-cache") "true"))
99 #t))
100 (add-after 'unpack 'adjust-for-new-poppler
101 (lambda _
102 (substitute* (find-files "src/extension/internal/pdfinput")
103 ;; Needed for Poppler 0.82.
104 (("Unicode \\*u") "Unicode const *u")
105 ;; Needed for Poppler 0.83.
106 (("\\(GfxPath") "(const GfxPath")
107 (("GfxSubpath") "const GfxSubpath")
108 (("new GlobalParams\\(\\)")
109 "std::unique_ptr<GlobalParams>(new GlobalParams())")
110 (("new GlobalParams\\(poppler_datadir\\)")
111 "std::unique_ptr<GlobalParams>(new GlobalParams(poppler_datadir))"))
112 #t)))))
113 (home-page "https://inkscape.org/")
114 (synopsis "Vector graphics editor")
115 (description "Inkscape is a vector graphics editor. What sets Inkscape
116 apart is its use of Scalable Vector Graphics (SVG), an XML-based W3C standard,
117 as the native format.")
118 (license license:gpl2+)))
119
120 (define-public inkscape-1.0
121 (package
122 (name "inkscape")
123 (version "1.0.2")
124 (source
125 (origin
126 (method url-fetch)
127 (uri (string-append "https://media.inkscape.org/dl/"
128 "resources/file/"
129 "inkscape-" version ".tar.xz"))
130 (sha256
131 (base32
132 "12krl97a00gdcxxibsb7g2lgx5458mhx2437x0hvz350242j6gns"))
133 (modules '((guix build utils)
134 (ice-9 format)))
135 (snippet
136 '(begin
137 (let-syntax
138 ;; XXX: The build system doesn't currently support using
139 ;; system libraries over bundled ones (see:
140 ;; https://gitlab.com/inkscape/inkscape/issues/876).
141 ((unbundle
142 (syntax-rules ()
143 ((_ (name source-dir use-pkg-config?) ...)
144 (begin
145 ;; Delete bundled source directories.
146 (delete-file-recursively source-dir) ...
147 (substitute* '("src/CMakeLists.txt"
148 "src/3rdparty/CMakeLists.txt")
149 (((string-append ".*add_subdirectory\\("
150 (basename source-dir) "\\).*"))
151 "") ...)
152 ;; Remove bundled entries from INKSCAPE_TARGET_LIBS.
153 (substitute* "src/CMakeLists.txt"
154 (((string-append name "_LIB.*")) "") ...)
155 ;; Register the external libraries, so that their
156 ;; headers are added to INKSCAPE_INCS_SYS and their
157 ;; shared libraries added to INKSCAPE_LIBS.
158 (if use-pkg-config?
159 (let* ((width (string-length "pkg_check_modules("))
160 (indent (string-join (make-list width " ") "")))
161 (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
162 (("^pkg_check_modules\\(INKSCAPE_DEP REQUIRED.*" start)
163 (string-append start
164 (format #f "~a~a~%" indent name)))))
165 (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
166 (("^find_package\\(Iconv REQUIRED\\).*" start)
167 (string-append (format #f "
168 find_path(~a_INCLUDE_DIR NAMES ~:*~a/~:*~a.h ~:*~a.h)
169 if(NOT ~:*~a_INCLUDE_DIR)
170 message(FATAL_ERROR \"~:*~a headers not found\")
171 else()
172 list(APPEND INKSCAPE_INCS_SYS ${~:*~a_INCLUDE_DIR})
173 endif()
174
175 find_library(~:*~a_LIB NAMES ~:*~a)
176 if(NOT ~:*~a_LIB)
177 message(FATAL_ERROR \"~:*~a library not found\")
178 else()
179 list(APPEND INKSCAPE_LIBS ~:*~a_LIB)
180 endif()~%~%"
181 name)
182 start)))) ...
183 ;; Fix the references to the headers of the
184 ;; unbundled libraries.
185 (substitute* (find-files "." "\\.h$|\\.cpp$")
186 (((string-append "#include (\"|<)3rdparty/"
187 (basename source-dir)) _ quote)
188 (string-append "#include " quote
189 (basename source-dir)))
190 ...))))))
191 (unbundle ("2geom" "src/2geom" #t)
192 ;; libcroco cannot be unbundled as it is heavily
193 ;; modified (see:
194 ;; https://gitlab.com/inkscape/inkscape/issues/876#note_276114904).
195 ;; ("croco" "src/3rdparty/libcroco" #t)
196 ;; FIXME: Unbundle the following libraries once they
197 ;; have been packaged.
198 ;; ("cola" "src/3rdparty/adaptagrams/libcola")
199 ;; ("avoid" "src/3rdparty/adaptagrams/libavoid")
200 ;; ("vpsc" "src/3rdparty/adaptagrams/libvpsc")
201 ;; libuemf cannot be unbundled as it slightly modified
202 ;; from upstream (see:
203 ;; https://gitlab.com/inkscape/inkscape/issues/973).
204 ;; ("uemf" "src/3rdparty/libuemf" #f)
205 ;; FIXME: libdepixelize upstream is ancient and doesn't
206 ;; build with a recent lib2geom
207 ;; (see: https://bugs.launchpad.net/libdepixelize/+bug/1862458).
208 ;;("depixelize" "src/3rdparty/libdepixelize")
209 ("autotrace" "src/3rdparty/autotrace" #t)))
210 ;; Lift the requirement on the double-conversion library, as
211 ;; it is only needed by lib2geom, which is now unbundled.
212 (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
213 ((".*find_package\\(DoubleConversion.*") ""))
214 #t))))
215 (build-system cmake-build-system)
216 (arguments
217 `(#:tests? #t
218 #:test-target "check" ;otherwise some test binaries are missing
219 #:imported-modules (,@%cmake-build-system-modules
220 (guix build glib-or-gtk-build-system))
221 #:modules ((guix build cmake-build-system)
222 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
223 (guix build utils))
224 #:phases
225 (modify-phases %standard-phases
226 (add-after 'unpack 'patch-icon-cache-generator
227 (lambda _
228 (substitute* "share/icons/application/CMakeLists.txt"
229 (("gtk-update-icon-cache") "true"))
230 #t))
231 (add-after 'unpack 'disable-latex-export-tests
232 ;; FIXME: For some reason the test.pdf_tex file generated by the
233 ;; "--export-latex" lacks "some text" in its content when run in
234 ;; the build environment. Skip the related tests.
235 (lambda _
236 (substitute* "testfiles/cli_tests/CMakeLists.txt"
237 (("add_cli_test\\(export-latex")
238 "message(TEST_DISABLED: export-latex"))
239 #t))
240 (add-after 'unpack 'set-home
241 ;; Mute Inkscape warnings during tests.
242 (lambda _
243 (setenv "HOME" (getcwd))
244 (format #t "ARGS is set to: ~a" (getenv "ARGS"))
245 #t))
246 ;; Move the check phase after the install phase, as when run in the
247 ;; tests, Inkscape relies on files that are not yet installed, such
248 ;; as the "share/inkscape/ui/units.xml" file.
249 (delete 'check)
250 (add-after 'install 'check
251 (assoc-ref %standard-phases 'check))
252 (add-after 'install 'glib-or-gtk-compile-schemas
253 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
254 (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
255 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
256 (add-after 'install 'wrap-program
257 ;; Ensure Python is available at runtime.
258 (lambda* (#:key outputs #:allow-other-keys)
259 (let ((out (assoc-ref outputs "out")))
260 (wrap-program (string-append out "/bin/inkscape")
261 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
262 #t)))))
263 (inputs
264 `(("aspell" ,aspell)
265 ("autotrace" ,autotrace)
266 ("gdl" ,gdl-minimal)
267 ("gtkmm" ,gtkmm)
268 ("gtk" ,gtk+)
269 ("gtkspell3" ,gtkspell3)
270 ("gsl" ,gsl)
271 ("poppler" ,poppler)
272 ("lib2geom" ,lib2geom)
273 ("libjpeg" ,libjpeg-turbo)
274 ("libpng" ,libpng)
275 ("libxml2" ,libxml2)
276 ("libxslt" ,libxslt)
277 ("libgc" ,libgc)
278 ("libsoup" ,libsoup-minimal)
279 ("libcdr" ,libcdr)
280 ("libvisio" ,libvisio)
281 ("libwpd" ,libwpd)
282 ("libwpg" ,libwpg)
283 ("freetype" ,freetype)
284 ("popt" ,popt)
285 ("potrace" ,potrace)
286 ("lcms" ,lcms)
287 ("boost" ,boost)
288 ("python" ,python-wrapper)
289 ("python-scour" ,python-scour)
290 ("python-pyserial" ,python-pyserial)
291 ("python-numpy" ,python-numpy)
292 ("python-lxml" ,python-lxml)))
293 (native-inputs
294 `(("imagemagick" ,imagemagick) ;for tests
295 ("intltool" ,intltool)
296 ("glib" ,glib "bin")
297 ("googletest" ,googletest)
298 ("perl" ,perl)
299 ("pkg-config" ,pkg-config)))
300 (home-page "https://inkscape.org/")
301 (synopsis "Vector graphics editor")
302 (description "Inkscape is a vector graphics editor. What sets Inkscape
303 apart is its use of Scalable Vector Graphics (SVG), an XML-based W3C standard,
304 as the native format.")
305 (license license:gpl3+))) ;see the file COPYING