gnu: qemu: Add fixes for CVE-2015-5154 and CVE-2015-5158.
[jackhill/guix/guix.git] / gnu / packages / music.scm
CommitLineData
1b6826d3
RW
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
3;;;
4;;; This file is part of GNU Guix.
5;;;
6;;; GNU Guix is free software; you can redistribute it and/or modify it
7;;; under the terms of the GNU General Public License as published by
8;;; the Free Software Foundation; either version 3 of the License, or (at
9;;; your option) any later version.
10;;;
11;;; GNU Guix is distributed in the hope that it will be useful, but
12;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14;;; GNU General Public License for more details.
15;;;
16;;; You should have received a copy of the GNU General Public License
17;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
18
19(define-module (gnu packages music)
20 #:use-module (guix utils)
21 #:use-module (guix packages)
22 #:use-module (guix download)
8e80244a 23 #:use-module (guix git-download)
1b6826d3
RW
24 #:use-module ((guix licenses) #:prefix license:)
25 #:use-module (guix build-system gnu)
8b9ec354 26 #:use-module (guix build-system cmake)
8e80244a 27 #:use-module (guix build-system waf)
1b6826d3 28 #:use-module (gnu packages)
c267cc15 29 #:use-module (gnu packages audio)
8b9ec354
RW
30 #:use-module (gnu packages base) ;libbdf
31 #:use-module (gnu packages boost)
1b6826d3 32 #:use-module (gnu packages bison)
8b9ec354
RW
33 #:use-module (gnu packages code)
34 #:use-module (gnu packages check)
35 #:use-module (gnu packages compression)
1b6826d3
RW
36 #:use-module (gnu packages docbook)
37 #:use-module (gnu packages flex)
8e80244a 38 #:use-module (gnu packages fltk)
1b6826d3
RW
39 #:use-module (gnu packages fonts)
40 #:use-module (gnu packages fontutils)
6260d1a8 41 #:use-module (gnu packages gcc)
1b6826d3
RW
42 #:use-module (gnu packages gettext)
43 #:use-module (gnu packages ghostscript)
ec8da0e2 44 #:use-module (gnu packages gl)
8e80244a 45 #:use-module (gnu packages glib)
c267cc15 46 #:use-module (gnu packages gnome)
1b6826d3
RW
47 #:use-module (gnu packages gtk)
48 #:use-module (gnu packages guile)
c267cc15 49 #:use-module (gnu packages image)
1b6826d3 50 #:use-module (gnu packages imagemagick)
6260d1a8 51 #:use-module (gnu packages java)
c267cc15
RW
52 #:use-module (gnu packages linux) ; for alsa-utils
53 #:use-module (gnu packages man)
54 #:use-module (gnu packages mp3)
1b6826d3
RW
55 #:use-module (gnu packages netpbm)
56 #:use-module (gnu packages perl)
57 #:use-module (gnu packages pkg-config)
d231bb35 58 #:use-module (gnu packages pulseaudio) ;libsndfile
1b6826d3 59 #:use-module (gnu packages python)
8b9ec354 60 #:use-module (gnu packages qt)
d231bb35 61 #:use-module (gnu packages rdf)
1b6826d3
RW
62 #:use-module (gnu packages rsync)
63 #:use-module (gnu packages texinfo)
64 #:use-module (gnu packages texlive)
8b9ec354 65 #:use-module (gnu packages web)
c267cc15
RW
66 #:use-module (gnu packages xml)
67 #:use-module (gnu packages xiph)
1b6826d3
RW
68 #:use-module (gnu packages zip))
69
d231bb35
RW
70(define-public hydrogen
71 (package
72 (name "hydrogen")
73 (version "0.9.5.1")
74 (source (origin
75 (method url-fetch)
76 (uri (string-append
77 "mirror://sourceforge/hydrogen/Hydrogen/"
78 (version-prefix version 3) "%20Sources/"
79 "hydrogen-" version ".tar.gz"))
80 (sha256
81 (base32
82 "1fvyp6gfzcqcc90dmaqbm11p272zczz5pfz1z4lj33nfr7z0bqgb"))))
83 (build-system gnu-build-system)
84 (arguments
85 `(#:tests? #f ;no "check" target
86 #:phases
87 ;; TODO: Add scons-build-system and use it here.
88 (modify-phases %standard-phases
89 (delete 'configure)
90 (add-after 'unpack 'scons-propagate-environment
91 (lambda _
92 ;; By design, SCons does not, by default, propagate
93 ;; environment variables to subprocesses. See:
94 ;; <http://comments.gmane.org/gmane.linux.distributions.nixos/4969>
95 ;; Here, we modify the Sconstruct file to arrange for
96 ;; environment variables to be propagated.
97 (substitute* "Sconstruct"
98 (("^env = Environment\\(")
99 "env = Environment(ENV=os.environ, "))))
100 (replace 'build
101 (lambda* (#:key inputs outputs #:allow-other-keys)
102 (let ((out (assoc-ref outputs "out")))
103 (zero? (system* "scons"
104 (string-append "prefix=" out)
105 "lrdf=0" ; cannot be found
106 "lash=1")))))
107 (add-before
108 'install
109 'fix-img-install
110 (lambda _
111 ;; The whole ./data/img directory is copied to the target first.
112 ;; Scons complains about existing files when we try to install all
113 ;; images a second time.
114 (substitute* "Sconstruct"
115 (("os.path.walk\\(\"./data/img/\",install_images,env\\)") ""))
116 #t))
117 (replace 'install (lambda _ (zero? (system* "scons" "install")))))))
118 (native-inputs
119 `(("scons" ,scons)
120 ("python" ,python-2)
121 ("pkg-config" ,pkg-config)))
122 (inputs
123 `(("zlib" ,zlib)
124 ("libtar" ,libtar)
125 ("alsa-lib" ,alsa-lib)
126 ("jack" ,jack-1)
127 ("lash" ,lash)
128 ;;("lrdf" ,lrdf) ;FIXME: cannot be found by scons
129 ("qt" ,qt-4)
130 ("libsndfile" ,libsndfile)))
131 (home-page "http://www.hydrogen-music.org")
132 (synopsis "Drum machine")
133 (description
134 "Hydrogen is an advanced drum machine for GNU/Linux. Its main goal is to
135enable professional yet simple and intuitive pattern-based drum programming.")
136 (license license:gpl2+)))
137
1b6826d3
RW
138(define-public lilypond
139 (package
140 (name "lilypond")
141 (version "2.18.2")
142 (source (origin
143 (method url-fetch)
144 (uri (string-append
145 "http://download.linuxaudio.org/lilypond/sources/v"
146 (version-major+minor version) "/"
147 name "-" version ".tar.gz"))
148 (sha256
149 (base32
150 "01xs9x2wjj7w9appaaqdhk15r1xvvdbz9qwahzhppfmhclvp779j"))))
151 (build-system gnu-build-system)
152 (arguments
153 `(;; Tests fail with this error:
154 ;; Undefined subroutine &main::get_index called at
155 ;; ./lilypond-2.18.2/Documentation/lilypond-texi2html.init line 2127.
156 #:tests? #f
157 #:out-of-source? #t
158 #:phases
159 (alist-cons-before
160 'configure 'prepare-configuration
161 (lambda _
162 (substitute* "configure"
163 (("SHELL=/bin/sh") "SHELL=sh"))
164 (setenv "out" "")
165 #t)
166 %standard-phases)))
167 (inputs
168 `(("guile" ,guile-1.8)
169 ("font-dejavu" ,font-dejavu)
170 ("fontconfig" ,fontconfig)
171 ("freetype" ,freetype)
172 ("ghostscript" ,ghostscript)
173 ("pango" ,pango)
174 ("python" ,python-2)))
175 (native-inputs
176 `(("bison" ,bison)
177 ("perl" ,perl)
178 ("flex" ,flex)
179 ("fontforge" ,fontforge)
180 ("dblatex" ,dblatex)
181 ("gettext" ,gnu-gettext)
182 ("imagemagick" ,imagemagick)
183 ("netpbm" ,netpbm) ;for pngtopnm
184 ("texlive" ,texlive) ;metafont and metapost
185 ("texinfo" ,texinfo)
186 ("texi2html" ,texi2html)
187 ("rsync" ,rsync)
188 ("pkg-config" ,pkg-config)
189 ("zip" ,zip)))
190 (home-page "http://www.lilypond.org/")
191 (synopsis "Music typesetting")
192 (description
193 "GNU LilyPond is a music typesetter, which produces high-quality sheet
194music. Music is input in a text file containing control sequences which are
195interpreted by LilyPond to produce the final document. It is extendable with
196Guile.")
197 (license license:gpl3+)))
c267cc15 198
8e80244a
RW
199(define-public non-sequencer
200 ;; The latest tagged release is three years old and uses a custom build
201 ;; system, so we take the last commit affecting the "sequencer" directory.
202 (let ((commit "1d9bd576"))
203 (package
204 (name "non-sequencer")
205 (version (string-append "1.9.5-" commit))
206 (source (origin
207 (method git-fetch)
208 (uri (git-reference
209 (url "git://git.tuxfamily.org/gitroot/non/non.git")
210 (commit commit)))
211 (sha256
212 (base32
213 "0pkkw8q6d55j38xm7r4rwpdv1wy00a44h8c4wrn7vbgpq9nij46y"))
214 (file-name (string-append name "-" version "-checkout"))))
215 (build-system waf-build-system)
216 (arguments
217 `(#:tests? #f ;no "check" target
218 #:configure-flags '("--project=sequencer")
219 #:python ,python-2))
220 (inputs
221 `(("jack" ,jack-1)
222 ("libsigc++" ,libsigc++)
223 ("liblo" ,liblo)
224 ("ntk" ,ntk)))
225 (native-inputs
226 `(("pkg-config" ,pkg-config)))
227 (home-page "http://non.tuxfamily.org/wiki/Non%20Sequencer")
228 (synopsis "Pattern-based MIDI sequencer")
229 (description
230 "The Non Sequencer is a powerful, lightweight, real-time,
231pattern-based MIDI sequencer. It utilizes the JACK Audio Connection Kit for
232MIDI I/O and the NTK GUI toolkit for its user interface. Everything in Non
233Sequencer happens on-line, in real-time. Music can be composed live, while the
234transport is rolling.")
235 (license license:gpl2+))))
236
c267cc15
RW
237(define-public solfege
238 (package
239 (name "solfege")
240 (version "3.22.2")
241 (source (origin
242 (method url-fetch)
243 (uri (string-append
244 "mirror://gnu/solfege/solfege-"
245 version ".tar.xz"))
246 (sha256
247 (base32
248 "1w25rxdbj907nsx285k9nm480pvy12w3yknfh4n1dfv17cwy072i"))))
249 (build-system gnu-build-system)
250 (arguments
251 `(#:tests? #f ; xmllint attempts to download DTD
252 #:test-target "test"
253 #:phases
254 (alist-cons-after
255 'unpack 'fix-configuration
256 (lambda* (#:key inputs #:allow-other-keys)
257 (substitute* "default.config"
258 (("csound=csound")
259 (string-append "csound="
260 (assoc-ref inputs "csound")
261 "/bin/csound"))
262 (("/usr/bin/aplay")
263 (string-append (assoc-ref inputs "aplay")
264 "/bin/aplay"))
265 (("/usr/bin/timidity")
266 (string-append (assoc-ref inputs "timidity")
267 "/bin/timidity"))
268 (("/usr/bin/mpg123")
269 (string-append (assoc-ref inputs "mpg123")
270 "/bin/mpg123"))
271 (("/usr/bin/ogg123")
272 (string-append (assoc-ref inputs "ogg123")
273 "/bin/ogg123"))))
274 (alist-cons-before
275 'build 'patch-python-shebangs
276 (lambda _
277 ;; Two python scripts begin with a Unicode BOM, so patch-shebang
278 ;; has no effect.
279 (substitute* '("solfege/parsetree.py"
280 "solfege/presetup.py")
281 (("#!/usr/bin/python") (string-append "#!" (which "python")))))
282 (alist-cons-before
283 'build 'add-sitedirs
284 ;; .pth files are not automatically interpreted unless the
285 ;; directories containing them are added as "sites". The directories
286 ;; are then added to those in the PYTHONPATH. This is required for
287 ;; the operation of pygtk and pygobject.
288 (lambda _
289 (substitute* "run-solfege.py"
290 (("import os")
291 "import os, site
292for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)")))
293 (alist-cons-before
294 'build 'adjust-config-file-prefix
295 (lambda* (#:key outputs #:allow-other-keys)
296 (substitute* "run-solfege.py"
297 (("prefix = os.path.*$")
298 (string-append "prefix = " (assoc-ref outputs "out")))))
299 (alist-cons-after
300 'install 'wrap-program
301 (lambda* (#:key inputs outputs #:allow-other-keys)
302 ;; Make sure 'solfege' runs with the correct PYTHONPATH. We
303 ;; also need to modify GDK_PIXBUF_MODULE_FILE for SVG support.
304 (let* ((out (assoc-ref outputs "out"))
305 (path (getenv "PYTHONPATH"))
306 (rsvg (assoc-ref inputs "librsvg"))
307 (pixbuf (find-files rsvg "^loaders\\.cache$")))
308 (wrap-program (string-append out "/bin/solfege")
309 `("PYTHONPATH" ":" prefix (,path))
310 `("GDK_PIXBUF_MODULE_FILE" ":" prefix ,pixbuf))))
311 %standard-phases)))))))
312 (inputs
313 `(("python" ,python-2)
314 ("pygtk" ,python2-pygtk)
315 ("gettext" ,gnu-gettext)
316 ("gtk" ,gtk+)
317 ;; TODO: Lilypond is optional. Produces errors at build time:
318 ;; Drawing systems...Error: /undefinedresult in --glyphshow--
319 ;; Fontconfig is needed to fix one of the errors, but other similar
320 ;; errors remain.
321 ;;("lilypond" ,lilypond)
322 ("librsvg" ,librsvg) ; needed at runtime for icons
323 ("libpng" ,libpng) ; needed at runtime for icons
324 ;; players needed at runtime
325 ("aplay" ,alsa-utils)
326 ("csound" ,csound) ; optional, needed for some exercises
327 ("mpg123" ,mpg123)
328 ("ogg123" ,vorbis-tools)
329 ("timidity" ,timidity++)))
330 (native-inputs
331 `(("pkg-config" ,pkg-config)
332 ("txt2man" ,txt2man)
333 ("libxml2" ,libxml2) ; for tests
334 ("ghostscript" ,ghostscript)
335 ;;("fontconfig" ,fontconfig) ; only needed with lilypond
336 ;;("freetype" ,freetype) ; only needed with lilypond
337 ("texinfo" ,texinfo)))
338 (home-page "https://www.gnu.org/software/solfege/")
339 (synopsis "Ear training")
340 (description
341 "GNU Solfege is a program for practicing musical ear-training. With it,
342you can practice your recognition of various musical intervals and chords. It
343features a statistics overview so you can monitor your progress across several
344sessions. Solfege is also designed to be extensible so you can easily write
345your own lessons.")
346 (license license:gpl3+)))
6260d1a8 347
8b9ec354
RW
348(define-public powertabeditor
349 (package
350 (name "powertabeditor")
d19cf783 351 (version "2.0.0-alpha8")
8b9ec354
RW
352 (source (origin
353 (method url-fetch)
354 (uri (string-append
355 "https://github.com/powertab/powertabeditor/archive/"
356 version ".tar.gz"))
357 (file-name (string-append name "-" version ".tar.gz"))
358 (sha256
359 (base32
d19cf783 360 "0gaa2x209v3azql8ak3r1n9a9qbxjx2ssirvwdxwklv2lmfqkm82"))
8b9ec354
RW
361 (modules '((guix build utils)))
362 (snippet
363 '(begin
364 ;; Remove bundled sources for external libraries
365 (delete-file-recursively "external")
366 (substitute* "CMakeLists.txt"
367 (("include_directories\\(\\$\\{PROJECT_SOURCE_DIR\\}/external/.*") "")
8b9ec354
RW
368 (("add_subdirectory\\(external\\)") ""))
369 (substitute* "test/CMakeLists.txt"
370 (("include_directories\\(\\$\\{PROJECT_SOURCE_DIR\\}/external/.*") ""))
371
372 ;; Add install target
373 (substitute* "source/CMakeLists.txt"
374 (("qt5_use_modules")
375 (string-append
376 "install(TARGETS powertabeditor "
377 "RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)\n"
378 "install(FILES data/tunings.json DESTINATION "
379 "${CMAKE_INSTALL_PREFIX}/share/powertabeditor/)\n"
380 "qt5_use_modules")))
381 #t))))
382 (build-system cmake-build-system)
383 (arguments
7e11d113 384 `(#:modules ((guix build cmake-build-system)
8b9ec354
RW
385 (guix build utils)
386 (ice-9 match))
387 #:configure-flags
388 ;; CMake appears to lose the RUNPATH for some reason, so it has to be
389 ;; explicitly set with CMAKE_INSTALL_RPATH.
7e11d113
RW
390 (list "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
391 "-DCMAKE_ENABLE_PRECOMPILED_HEADERS=OFF" ; if ON pte_tests cannot be built
392 (string-append "-DCMAKE_INSTALL_RPATH="
8b9ec354
RW
393 (string-join (map (match-lambda
394 ((name . directory)
395 (string-append directory "/lib")))
396 %build-inputs) ";")))
397 #:phases
398 (modify-phases %standard-phases
7e11d113
RW
399 (replace
400 'check
401 (lambda _
402 (zero? (system* "bin/pte_tests"
403 ;; Exclude this failing test
404 "~Formats/PowerTabOldImport/Directions"))))
405 (add-before
406 'configure 'fix-tests
407 (lambda _
408 ;; Tests cannot be built with precompiled headers
409 (substitute* "test/CMakeLists.txt"
410 (("cotire\\(pte_tests\\)") ""))
411 #t))
8b9ec354
RW
412 (add-before
413 'configure 'remove-third-party-libs
414 (lambda* (#:key inputs #:allow-other-keys)
415 ;; Link with required static libraries, because we're not
416 ;; using the bundled version of withershins.
417 (substitute* '("source/CMakeLists.txt"
418 "test/CMakeLists.txt")
7e11d113 419 (("target_link_libraries\\((powertabeditor|pte_tests)" _ target)
8b9ec354
RW
420 (string-append "target_link_libraries(" target " "
421 (assoc-ref inputs "binutils")
422 "/lib/libbfd.a "
d6902798 423 (assoc-ref inputs "libiberty")
8b9ec354
RW
424 "/lib/libiberty.a "
425 "dl")))
426 #t)))))
427 (inputs
428 `(("boost" ,boost)
429 ("alsa-lib" ,alsa-lib)
430 ("qt" ,qt)
431 ("withershins" ,withershins)
d6902798 432 ("libiberty" ,libiberty) ;for withershins
8b9ec354
RW
433 ("binutils" ,binutils) ;for -lbfd and -liberty (for withershins)
434 ("timidity" ,timidity++)
435 ("pugixml" ,pugixml)
436 ("rtmidi" ,rtmidi)
437 ("rapidjson" ,rapidjson)
438 ("zlib" ,zlib)))
439 (native-inputs
440 `(("catch" ,catch-framework)
441 ("pkg-config" ,pkg-config)))
442 (home-page "http://powertabs.net")
443 (synopsis "Guitar tablature editor")
444 (description
445 "Power Tab Editor 2.0 is the successor to the famous original Power Tab
446Editor. It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
447 (license license:gpl3+)))
448
ec8da0e2
RW
449(define-public setbfree
450 (package
451 (name "setbfree")
452 (version "0.8.0")
453 (source (origin
454 (method url-fetch)
455 (uri
456 (string-append
457 "https://github.com/pantherb/setBfree/releases/download/v"
458 version "/setbfree-" version ".tar.gz"))
459 (sha256
460 (base32
461 "045bgp7qsigpbrhk7qvgvliwiy26sajifwn7f2jvk90ckfqnlw4b"))))
462 (build-system gnu-build-system)
463 (arguments
464 `(#:tests? #f ; no "check" target
465 #:make-flags
466 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
467 (string-append "FONTFILE="
468 (assoc-ref %build-inputs "font-bitstream-vera")
b42d4508
RW
469 "/share/fonts/truetype/VeraBd.ttf")
470 ;; Disable unsupported optimization flags on non-x86
471 ,@(let ((system (or (%current-target-system)
472 (%current-system))))
473 (if (or (string-prefix? "x86_64" system)
474 (string-prefix? "i686" system))
475 '()
476 '("OPTIMIZATIONS=-ffast-math -fomit-frame-pointer -O3"))))
ec8da0e2
RW
477 #:phases
478 (modify-phases %standard-phases
479 (add-before 'build 'set-CC-variable
480 (lambda _ (setenv "CC" "gcc") #t))
481 (delete 'configure))))
482 (inputs
483 `(("jack" ,jack-1)
484 ("lv2" ,lv2)
485 ("zita-convolver" ,zita-convolver)
486 ("glu" ,glu)
487 ("ftgl" ,ftgl)
488 ("font-bitstream-vera" ,font-bitstream-vera)))
489 (native-inputs
490 `(("help2man" ,help2man)
491 ("pkg-config" ,pkg-config)))
492 (home-page "http://setbfree.org")
493 (synopsis "Tonewheel organ")
494 (description
495 "setBfree is a MIDI-controlled, software synthesizer designed to imitate
496the sound and properties of the electromechanical organs and sound
497modification devices that brought world-wide fame to the names and products of
498Laurens Hammond and Don Leslie.")
499 (license license:gpl2+)))
500
6260d1a8
RW
501(define-public tuxguitar
502 (package
503 (name "tuxguitar")
504 (version "1.2")
505 (source (origin
506 (method url-fetch)
507 (uri (string-append
508 "mirror://sourceforge/tuxguitar/TuxGuitar/TuxGuitar-"
509 version "/tuxguitar-src-" version ".tar.gz"))
510 (sha256
511 (base32
512 "1g1yf2gd06fzdhqb8kb8dmdcmr602s9y24f01kyl4940wimgr944"))))
513 (build-system gnu-build-system)
514 (arguments
515 `(#:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
516 (assoc-ref %outputs "out") "/lib")
517 (string-append "PREFIX="
518 (assoc-ref %outputs "out"))
519 (string-append "SWT_PATH="
520 (assoc-ref %build-inputs "swt")
521 "/share/java/swt.jar"))
522 #:tests? #f ;no "check" target
523 #:parallel-build? #f ;not supported
524 #:phases
525 (alist-cons-before
526 'build 'enter-dir-set-path-and-pass-ldflags
527 (lambda* (#:key inputs #:allow-other-keys)
528 (chdir "TuxGuitar")
529 (substitute* "GNUmakefile"
530 (("PROPERTIES\\?=")
531 (string-append "PROPERTIES?= -Dswt.library.path="
532 (assoc-ref inputs "swt") "/lib"))
533 (("\\$\\(GCJ\\) -o") "$(GCJ) $(LDFLAGS) -o"))
534 #t)
535 (alist-delete 'configure %standard-phases))))
536 (inputs
537 `(("swt" ,swt)))
538 (native-inputs
539 `(("gcj" ,gcj-4.8)
540 ("pkg-config" ,pkg-config)))
541 (home-page "http://tuxguitar.com.ar")
542 (synopsis "Multitrack tablature editor and player")
543 (description
544 "TuxGuitar is a guitar tablature editor with player support through midi.
545It can display scores and multitrack tabs. TuxGuitar provides various
546additional features, including autoscrolling while playing, note duration
547management, bend/slide/vibrato/hammer-on/pull-off effects, support for
548tuplets, time signature management, tempo management, gp3/gp4/gp5 import and
549export.")
550 (license license:lgpl2.1+)))