(safe #f "Run safely")
(strict-infinity-checking #f "If yes, crash on encountering Inf/NaN.")
+ (strip-output-dir #t "If yes, strip directories from input files.")
(separate-log-files #f "Output to FILE.log per file.")
(trace-memory-frequency #f "Record Scheme cell usage this many times per second, and dump to file.")
(trace-scheme-coverage #f "Record coverage of Scheme files")
;;; have a more sensible default.
(if (or (ly:get-option 'verbose)
- (ly:get-option 'trace-memory-frequencency)
+ (ly:get-option 'trace-memory-frequency)
(ly:get-option 'trace-scheme-coverage)
)
(begin
"font.scm"
"encoding.scm"
+ "flag-styles.scm"
"fret-diagrams.scm"
- "define-markup-commands.scm"
+ "harp-pedals.scm"
+ "predefined-fretboards.scm"
+ "define-markup-commands.scm"
"define-grob-properties.scm"
"define-grobs.scm"
"define-grob-interfaces.scm"
(define (dump-profile base last this)
(let*
- ((outname (format "~a.profile" (basename base ".ly")))
+ ((outname (format "~a.profile" (dir-basename base ".ly")))
(diff (map (lambda (y) (apply - y)) (zip this last))))
(ly:progress "\nWriting timing to ~a..." outname)
(define (multi-fork count)
+ "Split this process in COUNT helpers. Returns either a list of pids,
+or the number of the process."
(define (helper count acc)
(if (> count 0)
(let*
(define-public (lilypond-main files)
"Entry point for LilyPond."
-
(eval-string (ly:command-line-code))
(if (ly:get-option 'help)
(if (and (number? (ly:get-option 'job-count))
(>= (length files) (ly:get-option 'job-count)))
-
(let*
((count (ly:get-option 'job-count))
(split-todo (split-list files count))
(if (number? joblist)
(begin
- (ly:set-option 'log-file (format "~a-~a"
- (ly:get-option 'log-file) joblist))
+ (ly:set-option
+ 'log-file (format "~a-~a"
+ (ly:get-option 'log-file) joblist))
(set! files (vector-ref split-todo joblist)))
(begin
(let* ((stat (cdr (waitpid pid))))
(if (not (= stat 0))
- (set! errors (acons (list-element-index joblist pid) stat errors)))))
+ (set! errors
+ (acons (list-element-index joblist pid)
+ stat errors)))))
joblist)
(for-each
(lambda (x)
(let* ((job (car x))
(state (cdr x))
- (logfile (format "~a-~a.log"
+ (logfile (format "~a-~a.log"
(ly:get-option 'log-file) job))
(log (ly:gulp-file logfile))
(len (string-length log))
(tail (substring log (max 0 (- len 1024)))))
(if (status:term-sig state)
- (ly:message "\n\n~a\n"
- (format (_ "job ~a terminated with signal: ~a")
- job
- (status:term-sig state)))
- (ly:message (_ "logfile ~a (exit ~a):\n~a") logfile (status:exit-val state) tail))))
+ (ly:message
+ "\n\n~a\n"
+ (format (_ "job ~a terminated with signal: ~a")
+ job (status:term-sig state)))
+ (ly:message
+ (_ "logfile ~a (exit ~a):\n~a")
+ logfile (status:exit-val state) tail))))
errors)
(dump-profile "lily-run-total" '(0 0) (profile-measurements)))
(exit (if (null? errors) 0 1))))))
-
(if (string-or-symbol? (ly:get-option 'log-file))
(ly:stderr-redirect (format "~a.log" (ly:get-option 'log-file)) "w"))
-
(let ((failed (lilypond-all files)))
(if (ly:get-option 'trace-scheme-coverage)
(begin
(coverage:show-all (lambda (f) (string-contains f "lilypond"))
)))
-
(if (pair? failed)
(begin
(define-public (lilypond-all files)
(let* ((failed '())
(separate-logs (ly:get-option 'separate-log-files))
+ (ping-log
+ (if separate-logs
+ (open-file (if (string-or-symbol? (ly:get-option 'log-file))
+ (format "~a.log" (ly:get-option 'log-file))
+ "/dev/tty") "a") #f))
(do-measurements (ly:get-option 'dump-profile))
(handler (lambda (key failed-file)
(set! failed (append (list failed-file) failed)))))
((start-measurements (if do-measurements
(profile-measurements)
#f))
- (base (basename x ".ly"))
+ (base (dir-basename x ".ly"))
(all-settings (ly:all-options)))
(if separate-logs
(ly:stderr-redirect (format "~a.log" base) "w"))
+ (if ping-log
+ (format ping-log "Procesing ~a\n" base))
+
(if (ly:get-option 'trace-memory-frequency)
(mtrace:start-trace (ly:get-option 'trace-memory-frequency)))
files)
;; we want the failed-files notice in the aggregrate logfile.
- (if (ly:get-option 'separate-logs)
- (ly:stderr-redirect
- (if (string-or-symbol? (ly:get-option 'log-file))
- (format "~a.log" (ly:get-option 'log-file))
- "/dev/tty") "a"))
-
+ (if ping-log
+ (format ping-log "Failed files: ~a\n" failed))
+
(if (ly:get-option 'dump-profile)
(dump-profile "lily-run-total" '(0 0) (profile-measurements)))
(gui-no-files-handler))
(if (not (string? (ly:get-option 'log-file)))
- (let* ((base (basename (car files) ".ly"))
+ (let* ((base (dir-basename (car files) ".ly"))
(log-name (string-append base ".log")))
(if (not (ly:get-option 'gui))
(ly:message (_ "Redirecting output to ~a...") log-name))