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