projects/guix·blob javascript-team · refs

498 lines · 18.4 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015, 2017, 2023, 2025 Ricardo Wurmus <[email protected]>
3;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <[email protected]>
4;;; Copyright © 2019 Pkill -9 <[email protected]>
5;;; Copyright © 2020, 2021, 2022 Vinicius Monego <[email protected]>
6;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
7;;;
8;;; This file is part of GNU Guix.
9;;;
10;;; GNU Guix is free software; you can redistribute it and/or modify it
11;;; under the terms of the GNU General Public License as published by
12;;; the Free Software Foundation; either version 3 of the License, or (at
13;;; your option) any later version.
14;;;
15;;; GNU Guix is distributed in the hope that it will be useful, but
16;;; WITHOUT ANY WARRANTY; without even the implied warranty of
17;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18;;; GNU General Public License for more details.
19;;;
20;;; You should have received a copy of the GNU General Public License
21;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
22
23(define-module (gnu packages animation)
24 #:use-module (guix packages)
25 #:use-module (guix download)
26 #:use-module (guix gexp)
27 #:use-module (guix git-download)
28 #:use-module (guix utils)
29 #:use-module ((guix licenses) #:prefix license:)
30 #:use-module (guix build-system cmake)
31 #:use-module (guix build-system gnu)
32 #:use-module (guix build-system meson)
33 #:use-module (gnu packages)
34 #:use-module (gnu packages algebra)
35 #:use-module (gnu packages assembly)
36 #:use-module (gnu packages autotools)
37 #:use-module (gnu packages bash)
38 #:use-module (gnu packages boost)
39 #:use-module (gnu packages check)
40 #:use-module (gnu packages compression)
41 #:use-module (gnu packages curl)
42 #:use-module (gnu packages dejagnu)
43 #:use-module (gnu packages fontutils)
44 #:use-module (gnu packages gettext)
45 #:use-module (gnu packages gl)
46 #:use-module (gnu packages glib)
47 #:use-module (gnu packages gnome)
48 #:use-module (gnu packages graphics)
49 #:use-module (gnu packages gstreamer)
50 #:use-module (gnu packages gtk)
51 #:use-module (gnu packages image)
52 #:use-module (gnu packages imagemagick)
53 #:use-module (gnu packages jemalloc)
54 #:use-module (gnu packages mp3)
55 #:use-module (gnu packages networking)
56 #:use-module (gnu packages pcre)
57 #:use-module (gnu packages perl)
58 #:use-module (gnu packages pkg-config)
59 #:use-module (gnu packages pulseaudio)
60 #:use-module (gnu packages python)
61 #:use-module (gnu packages qt)
62 #:use-module (gnu packages sdl)
63 #:use-module (gnu packages tls)
64 #:use-module (gnu packages video)
65 #:use-module (gnu packages xiph))
66
67(define-public rlottie
68 (package
69 (name "rlottie")
70 (version "0.2")
71 (source
72 (origin
73 (method git-fetch)
74 (uri
75 (git-reference
76 (url "https://github.com/Samsung/rlottie.git")
77 (commit
78 (string-append "v" version))))
79 (file-name
80 (git-file-name name version))
81 (sha256
82 (base32 "10bxr1zf9wxl55d4cw2j02r6sgqln7mbxplhhfvhw0z92fi40kr3"))))
83 (build-system meson-build-system)
84 (arguments
85 `(#:configure-flags
86 (list
87 "-Dlog=true"
88 "-Dtest=true"
89 "-Dcpp_std=gnu++17")))
90 (native-inputs
91 (list googletest pkg-config))
92 (synopsis "Lottie Animation Library")
93 (description "Rlottie is a platform independent standalone c++ library for
94rendering vector based animations and art in realtime.")
95 (home-page "https://github.com/Samsung/rlottie/")
96 (license license:expat)))
97
98;; ETL, synfig, and Synfig Studio are updated in tandem.
99(define synfig-version "1.5.3")
100
101(define-public etl
102 (package
103 (name "etl")
104 (version synfig-version)
105 (source (origin
106 (method url-fetch)
107 (uri (string-append "https://github.com/synfig/synfig"
108 "/releases/download/v" version
109 "/ETL-" version ".tar.gz"))
110 (sha256
111 (base32
112 "1gq63fj714a66g7fz3016ki1c73362sj73fy5005iyy1phn4s3v4"))))
113 (build-system gnu-build-system)
114 (inputs (list glibmm-2.66))
115 (native-inputs (list pkg-config))
116 (home-page "https://www.synfig.org")
117 (synopsis "Extended C++ template library")
118 (description
119 "ETL is a class and template library designed to add new datatypes and
120functions which combine well with the existing types and functions from the
121C++ @dfn{Standard Template Library} (STL).")
122 (license license:gpl3+)))
123
124(define-public synfig
125 (package
126 (name "synfig")
127 (version synfig-version)
128 (source (origin
129 (method url-fetch)
130 (uri (string-append "https://github.com/synfig/synfig"
131 "/releases/download/v" version
132 "/synfig-" version ".tar.gz"))
133 (sha256
134 (base32
135 "1a0ya2cdm5rskrhn033jwsg2ycg0b9dpqq5kndnzvn2sdvp9qg4i"))))
136 (build-system gnu-build-system)
137 (inputs
138 (list boost
139 libdv
140 libjpeg-turbo
141 libpng
142 libmng
143 zlib))
144 ;; synfig.pc lists the following as required: Magick++ libavcodec
145 ;; libavformat libswscale freetype2 fontconfig OpenEXR ETL glibmm-2.4
146 ;; giomm-2.4 libxml++-2.6 sigc++-2.0 cairo fftw3 pango pangocairo mlt++
147 (propagated-inputs
148 (list cairo
149 etl
150 ffmpeg
151 fftw
152 fontconfig
153 freetype
154 glibmm-2.66 ; latest possible version as of synfig 1.5.3
155 imagemagick
156 libxml++-2 ; libxml <= 2 required as of synfig 1.5.3
157 libsigc++
158 mlt
159 openexr
160 pango))
161 (native-inputs
162 (list intltool pkg-config))
163 (home-page "https://www.synfig.org")
164 (synopsis "Vector-based 2D animation renderer")
165 (description
166 "Synfig is a vector-based 2D animation package. It is designed to be
167capable of producing feature-film quality animation. It eliminates the need
168for tweening, preventing the need to hand-draw each frame.")
169 (license license:gpl3+)))
170
171(define-public synfigstudio
172 (package
173 (name "synfigstudio")
174 (version synfig-version)
175 (source (origin
176 (method url-fetch)
177 (uri (string-append "https://github.com/synfig/synfig"
178 "/releases/download/v" version
179 "/synfigstudio-" version ".tar.gz"))
180 (sha256
181 (base32
182 "1rdvyy5l8fl1gv60gvpw0zmbihdg2a048x8bwqbwj2za6qx00hvz"))))
183 (build-system gnu-build-system)
184 (arguments
185 (list
186 #:phases
187 #~(modify-phases %standard-phases
188 ;; This fixes the file chooser crash that happens with GTK 3.
189 (add-after 'install 'wrap-program
190 (lambda* (#:key inputs #:allow-other-keys)
191 (let* ((gtk (assoc-ref inputs "gtk+"))
192 (gtk-share (string-append gtk "/share")))
193 (wrap-program (string-append #$output "/bin/synfigstudio")
194 `("XDG_DATA_DIRS" ":" prefix (,gtk-share)))))))))
195 (inputs
196 (list bash-minimal gtkmm-3 gtk+ libsigc++ synfig))
197 (native-inputs
198 (list pkg-config intltool))
199 (home-page "https://www.synfig.org")
200 (synopsis "Vector-based 2D animation package (GUI)")
201 (description
202 "Synfig is a vector-based 2D animation package. It is designed to
203be capable of producing feature-film quality animation. It eliminates the
204need for tweening, preventing the need to hand-draw each frame. This package
205contains the graphical user interface for synfig.")
206 (license license:gpl3+)))
207
208;; This package provides a standalone (no browser plugin) version of
209;; Lightspark.
210(define-public lightspark
211 (package
212 (name "lightspark")
213 (version "0.9.0")
214 (source
215 (origin
216 (method git-fetch)
217 (uri (git-reference
218 (url "https://github.com/lightspark/lightspark")
219 (commit version)))
220 (file-name (git-file-name name version))
221 (sha256
222 (base32 "0j5rk7c9cg7bmnjmgsyn57h1gfdyjj76vjj6xl8j6y547p1adqnv"))))
223 (build-system cmake-build-system)
224 (arguments
225 `(#:tests? #f ;requires Adobe Flex SDK, see README.tests
226 ;; Disable browser plugins because neither NPAPI nor PPAPI is
227 ;; supported in the browsers we have.
228 #:configure-flags
229 '("-DCOMPILE_NPAPI_PLUGIN=FALSE"
230 "-DCOMPILE_PPAPI_PLUGIN=FALSE")
231 #:phases
232 (modify-phases %standard-phases
233 (add-after 'unpack 'prepare-build-environment
234 (lambda _
235 ;; Use relative etc path.
236 (substitute* "CMakeLists.txt" (("\\/etc") "etc"))))
237 (replace 'check
238 (lambda* (#:key tests? #:allow-other-keys)
239 (when tests?
240 (invoke "./tests")))))))
241 (native-inputs
242 (cons* gettext-minimal
243 `(,glib "bin")
244 perl
245 pkg-config
246 python-wrapper
247 (maybe-nasm)))
248 (inputs
249 (list cairo
250 curl
251 ffmpeg
252 freeglut
253 glew
254 glibmm
255 gnutls
256 libjpeg-turbo
257 openssl
258 pango
259 pcre2
260 rtmpdump
261 sdl2
262 zlib))
263 (home-page "https://lightspark.github.io/")
264 (synopsis "Flash player implementation")
265 (description
266 "Lightspark is a Flash player implementation for playing files in the SWF
267format. It supports SWF files written on all versions of the ActionScript
268language.")
269 ;; NOTE: The bundled pugixml is a fork specific to Lightspark and
270 ;; incompatible with the one we have.
271 ;; FIXME: we also have jxrlib, but the build fails to find JXRMeta.h so we
272 ;; use the bundled one for now.
273 (license (list license:lgpl3+ ;lightspark
274 license:mpl2.0 ;avmplus
275 license:bsd-2 ;jxrlib
276 license:expat)))) ;pugixml, PerlinNoise
277
278(define-public papagayo
279 (let ((commit "e143684b30e59fe4a554f965cb655d23cbe93ee7")
280 (revision "1"))
281 (package
282 (name "papagayo")
283 (version (string-append "2.0b1-" revision "." (string-take commit 9)))
284 (source (origin
285 (method git-fetch)
286 (uri (git-reference
287 (url "https://github.com/LostMoho/Papagayo")
288 (commit commit)))
289 (file-name (git-file-name name version))
290 (sha256
291 (base32
292 "1p9gffjhbph34jhrvgpg93yha75bf88vkvlnk06x1r9601ph5321"))
293 (modules '((guix build utils)))
294 ;; Delete bundled libsndfile sources.
295 (snippet
296 '(begin
297 (delete-file-recursively "libsndfile_1.0.19")
298 (delete-file-recursively "libsndfile_1.0.25")))))
299 (build-system gnu-build-system)
300 (arguments
301 (list
302 #:phases
303 #~(modify-phases %standard-phases
304 (replace 'configure
305 (lambda* (#:key inputs #:allow-other-keys)
306 (let ((libsndfile (assoc-ref inputs "libsndfile")))
307 ;; Do not use bundled libsndfile sources
308 (substitute* "Papagayo.pro"
309 (("else \\{")
310 (string-append "\nINCLUDEPATH += " libsndfile
311 "/include"
312 "\nLIBS +=" libsndfile
313 "/lib/libsndfile.so\n"
314 "win32 {"))))
315 (invoke "qmake"
316 (string-append "DESTDIR=" #$output "/bin"))))
317 ;; Ensure that all required Qt plugins are found at runtime.
318 (add-after 'install 'wrap-executable
319 (lambda* (#:key inputs #:allow-other-keys)
320 (let ((qt '("qtbase" "qtmultimedia" "qtwayland")))
321 (wrap-program (string-append #$output "/bin/Papagayo")
322 `("QT_PLUGIN_PATH" ":" prefix
323 ,(map (lambda (label)
324 (string-append (assoc-ref inputs label)
325 "/lib/qt5/plugins/"))
326 qt)))))))))
327 (inputs
328 (list bash-minimal qtbase-5 qtmultimedia-5 qtwayland-5 libsndfile))
329 (native-inputs
330 (list qttools-5))
331 (home-page "https://www.lostmarble.com/papagayo/")
332 (synopsis "Lip-syncing for animations")
333 (description
334 "Papagayo is a lip-syncing program designed to help you line up
335phonemes with the actual recorded sound of actors speaking. Papagayo makes it
336easy to lip sync animated characters by making the process very simple – just
337type in the words being spoken, then drag the words on top of the sound’s
338waveform until they line up with the proper sounds.")
339 (license license:gpl3+))))
340
341(define-public pencil2d
342 (package
343 (name "pencil2d")
344 (version "0.7.2")
345 (source (origin
346 (method git-fetch)
347 (uri (git-reference
348 (url "https://github.com/pencil2d/pencil")
349 (commit (string-append "v" version))))
350 (file-name (git-file-name name version))
351 (sha256
352 (base32
353 "1g56f1ng6v0z9f7hj9hl358p189j1my092472pravpn9z9669gvp"))))
354 (build-system gnu-build-system)
355 (native-inputs (list qttools))
356 (inputs
357 (list bash-minimal
358 qtbase
359 qtmultimedia
360 qtsvg
361 qtwayland
362 ;; Necessary for audio import
363 gstreamer
364 gst-plugins-base
365 gst-plugins-good
366 gst-plugins-bad
367 gst-libav))
368 (arguments
369 (list
370 #:phases
371 #~(modify-phases %standard-phases
372 (add-after 'unpack 'fix-tests
373 (lambda _
374 ;; Its bundled catch2-2.5.0 fails to build with glibc-2.35.
375 (copy-file #$(file-append catch2-2 "/include/catch2/catch.hpp")
376 "tests/src/catch.hpp")))
377 (replace 'configure
378 (lambda _
379 (invoke "qmake"
380 (string-append "PREFIX=" #$output)
381 (string-append
382 "QT_TOOL.lrelease.binary="
383 (search-input-file %build-inputs "/bin/lrelease")))))
384 (add-after 'install 'wrap-executable
385 (lambda* (#:key inputs outputs #:allow-other-keys)
386 (let ((out (assoc-ref outputs "out"))
387 (plugin-path (getenv "QT_PLUGIN_PATH")))
388 (wrap-program (string-append out "/bin/pencil2d")
389 `("QT_PLUGIN_PATH" ":" prefix (,plugin-path))
390 `("GST_PLUGIN_SYSTEM_PATH" ":" suffix
391 (,(getenv "GST_PLUGIN_SYSTEM_PATH"))))))))))
392 (home-page "https://www.pencil2d.org")
393 (synopsis "Make 2D hand-drawn animations")
394 (description
395 "Pencil2D is an easy-to-use and intuitive animation and drawing tool. It
396lets you create traditional hand-drawn animations (cartoons) using both bitmap
397and vector graphics.")
398 (license license:gpl2)))
399
400(define-public swftools
401 ;; Last release of swftools was 0.9.2 on 2012-04-21 - it is really old and
402 ;; does not compile with what's available in guix, master on the other hand
403 ;; works.
404 (let ((commit "c6a18ab0658286f98d6ed2b3d0419058e86a14a0")
405 (revision "2"))
406 (package
407 (name "swftools")
408 (version (git-version "0.9.2" revision commit))
409 (source
410 (origin
411 (method git-fetch)
412 (uri (git-reference
413 (url "https://github.com/matthiaskramm/swftools")
414 (commit commit)))
415 (sha256
416 (base32 "1hdfyprjjhhlba3gszaarf1rv3jynm4hs4v8kdys03qz4g8i53by"))
417 (file-name (git-file-name name version))
418 (modules '((guix build utils)))
419 (snippet
420 '(begin
421 ;; XXX: Swftools includes the source tarball of an old version of
422 ;; xpdf.
423
424 ;; To fix a linking error I followed the workaround in:
425 ;; https://github.com/matthiaskramm/swftools/issues/178
426 ;; and implented it as a two-step snippet because substitute*
427 ;; does not match multiline regexes.
428 (substitute* "lib/lame/quantize.c"
429 ;; move inline keywords to the same line as their function headers
430 (("^inline.*\n") "inline "))
431 (substitute* "lib/lame/quantize.c"
432 ;; make this particular function not inline
433 (("inline (void bitpressure_strategy1)" _ f) f))))))
434 (build-system gnu-build-system)
435 (arguments
436 (list #:tests? #f ; no rule for check
437 #:parallel-build? #f))
438 (inputs (list zlib freetype giflib libjpeg-turbo lame))
439 (native-inputs (list perl))
440 (home-page "http://www.swftools.org")
441 (synopsis "Collection of utilities for working with Adobe Flash files")
442
443 ;; XXX: This package will built all of swftools' tools but one: PDF2SWF,
444 ;; purposefuly commented out of the description below.
445 (description "SWFTools is a collection of utilities for working with
446Adobe Flash files (SWF files). The tool collection includes programs for
447reading SWF files, combining them, and creating them from other content (like
448images, sound files, videos or sourcecode). The current collection is
449 comprised of the programs detailed below:
450
451@itemize
452@comment PDF2SWF is not currentlybeing build alongside other tools. The next
453@comment two lines should be uncommented if this will ever get fixed.
454@comment @item
455@comment @command{pdf2swf} A PDF to SWF Converter.
456
457@item
458@command{swfcombine} A multi-function tool for inserting, contatenating,
459stacking and changing parameters in SWFs.
460
461@item
462@command{swfstrings} Scans SWFs for text data.
463@item
464@command{swfdump} Prints out various information about SWFs.
465
466@item
467@command{jpeg2swf} Takes one or more JPEG pictures and generates a SWF
468slideshow from them.
469
470@item
471@command{png2swf} Like JPEG2SWF, only for PNGs.
472
473@item
474@command{gif2swf} Converts GIFs to SWF. Also able to handle animated GIFs.
475
476@item
477@command{wav2swf} Converts WAV audio files to SWFs, using the LAME MP3
478 encoder library.
479
480@item
481@command{font2swf} Converts font files (TTF, Type1) to SWF.
482
483@item
484@command{swfbbox} reads out, optimizes and readjusts SWF bounding boxes.
485
486@item
487@command{swfc} A tool for creating SWF files from simple script files. Supports
488both ActionScript 2.0 aand 3.0.
489
490@item
491@command{swfextract} extracts Movieclips, Sounds, Images etc. from SWF
492 files.
493
494@item
495@command{as3compile} A standalone ActionScript 3.0 compiler. Mostly compatible
496 with Flex.
497@end itemize")
498 (license license:gpl2+))))