1{
2 lib,
3 buildPythonPackage,
4 fetchPypi,
5 ply,
6 roman,
7 uqbar,
8 pythonOlder,
9 pytestCheckHook,
10 lilypond,
11}:
12
13buildPythonPackage rec {
14 pname = "abjad";
15 version = "3.19";
16 format = "setuptools";
17
18 disabled = pythonOlder "3.10";
19
20 src = fetchPypi {
21 inherit pname version;
22 hash = "sha256-I9t3ORUKFFlMfXJsAzXhCzl1B4a9/ZNmvSX2/R44TPs=";
23 };
24
25 propagatedBuildInputs = [
26 ply
27 roman
28 uqbar
29 ];
30
31 buildInputs = [ lilypond ];
32
33 nativeCheckInputs = [ pytestCheckHook ];
34
35 postPatch = ''
36 substituteInPlace abjad/io.py \
37 --replace 'lilypond_path = self.get_lilypond_path()' \
38 'lilypond_path = "${lilypond}/bin/lilypond"'
39 # general invocations of binary for IO purposes
40
41 substituteInPlace abjad/configuration.py \
42 --replace '["lilypond"' '["${lilypond}/bin/lilypond"'
43 # get_lilypond_version_string
44 '';
45
46 pythonImportsCheck = [ "abjad" ];
47
48 meta = {
49 description = "GNU LilyPond wrapper for Python";
50 longDescription = ''
51 Abjad helps composers build up complex pieces of music notation in
52 iterative and incremental ways. Use Abjad to create a symbolic
53 representation of all the notes, rests, chords, tuplets, beams and slurs
54 in any score. Because Abjad extends the Python programming language, you
55 can use Abjad to make systematic changes to music as you work. Because
56 Abjad wraps the LilyPond music notation package, you can use Abjad to
57 control the typographic detail of symbols on the page.
58 '';
59 license = lib.licenses.mit;
60 homepage = "https://abjad.github.io/";
61 changelog = "https://abjad.github.io/appendices/changes.html";
62 maintainers = [ lib.maintainers.davisrichard437 ];
63 };
64}