lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Recursive includes


From: Michael Werner
Subject: Re: Recursive includes
Date: Sun, 16 Apr 2023 06:50:44 -0400

Hi Michael,

On Sun, Apr 16, 2023 at 5:00 AM Michael Dietz <michael.dietz@mailbox.org> wrote:
Hi Lilypond users,

I had an issue with a file which repeatedly crashed my computer. It took
all memory. The error is clearly on the user’s side: I had this line in
a file (let’s say) choir.ly:

\include choir.ly

So LilyPond recursively included this file over and over again until the
RAM was full.

That leads me to my question: Could lilypond catch this user error and
(a) know that it included it already and skip over the \include command
the second time or (b) warn the user and stop compiling the file (or any
other reasonable approach) to help the user?

Found a bit in the LSR a while back that addresses this. In a brief test it seems to do the trick.

From http://lsr.di.unimi.it/LSR/Item?id=894

% includeOnce: include a file only if it hasn't already been included.
% Usage: \includeOnce "my_file.ily"
% By Marnen Laibow-Koser <marnen@marnen.org>
% Based on http://lsr.di.unimi.it/LSR/Snippet?id=657
% and 
% http://lilypond.1069038.n5.nabble.com/conditional-include-td140471.html

includeOnce =
#(define-void-function (filename) (string?)
   (if
    (not (defined? (string->symbol filename)))
    (begin
     (ly:parser-include-string
      (string-concatenate
       (list "\\include \"" filename "\"")))
     (primitive-eval (list 'define (string->symbol filename) #t)))))

Hopefully that'll help out.

Michael

reply via email to

[Prev in Thread] Current Thread [Next in Thread]