2.7 Écriture de code supportant différentes versions

Dans certains cas, et tout particulièrement lorsque l’on se contitue une bibliothèque de code, il est souhaitable de pouvoir supporter différentes versions de LilyPond indépendamment des changements de syntaxe. Il est possible d’y parvenir à l’aide de portions de code englobées dans une expression conditionnelle et dont l’exécution se fera relativement à la version utilisée de LilyPond. La fonction ly:version? requiert un opérateur de comparaison op et une version de référence ver sous forme de liste d’entiers jusqu’à trois éléments. Les éléments absents sont ignorés, de telle sorte que '(2 20) est équivalent à toute version de la série 2.20. On peut donc en arriver à des constructions telles que :

#(cond
  ((ly:version? > '(2 20))
   (ly:message "Ce code sera exécuté avec un LilyPond postérieur à 2.20"))
  ((ly:version? = '(2 19 57))
   (ly:message "Ce code ne sera exécuté qu'avec LilyPond 2.19.57"))
  (else (ly:message "Ceci sera exécuté pour toutes les autres versions")))

Ceci viendra naturellement s’intégrer aux fonctions de bibliothèques pour permettre l’utilisation de syntaxes différentes. Une comparaison peut aussi apparaître au sein même de la musique comme ici :

{
  c' d' e' f'
  #(if (ly:version? = '(2 21))
       #{ \override NoteHead.color = #red #}
       #{ \override NoteHead.color = #blue #})
  g' a' b' c''
}

Note : Cette fonction ayant été introduite avec LilyPond 2.21.80, il n’est pas possible d’établir des comparaisons avec des versions qui lui sont antérieures.


GNU LilyPond – Utilisation des programmes v2.25.22 (development-branch).