(defmacro-public _i (x) x)
+;;; Boolean thunk - are we integrating Guile V2.0 or higher with LilyPond?
+(define-public (guile-v2)
+ (string>? (version) "1.9.10"))
+
(read-enable 'positions)
-(debug-enable 'debug)
+(if (not (guile-v2))
+ (debug-enable 'debug)
+ (begin
+ (debug-enable 'backtrace)
+ (debug-enable 'show-file-name)))
(define-public PLATFORM
(string->symbol
;;(set-debug-cell-accesses! 1000)
-;;; Boolean thunk - are we integrating Guile V2.0 or higher with LilyPond?
-(define-public (guile-v2)
- (string>? (version) "1.9.10"))
-
(use-modules (ice-9 regex)
(ice-9 safe)
(ice-9 format)
(scm coverage))
(define-public _ gettext)
-;;; TODO:
-;; There are new modules defined in Guile V2.0 which we need to use, e.g.
-;; the modules and scheme files loaded by lily.scm use currying.
-;; In Guile V2 this needs (ice-9 curried-definitions) which is not
-;; present in Guile V1.8
+;;; There are new modules defined in Guile V2.0 which we need to use.
;;
-;; TODO add in modules for V1.8,7 deprecated in V2.0 and integrated
+;; Modules and scheme files loaded by lily.scm use currying
+;; in Guile V2 this needs a module which is not present in Guile V1.8
+;;
+
+(cond
+ ((guile-v2)
+ (if (ly:get-option 'verbose)
+ (ly:message (_ "Using (ice-9 curried-definitions) module\n")))
+ (use-modules (ice-9 curried-definitions)))
+ (else
+ (if (ly:get-option 'verbose)
+ (ly:message (_ "Guile 1.8\n")))))
+
+;; TODO add in modules for V1.8.7 deprecated in V2.0 and integrated
;; into Guile base code, like (ice-9 syncase).
;;
(ly:get-option 'trace-scheme-coverage))
(begin
(ly:set-option 'protected-scheme-parsing #f)
- (debug-enable 'debug)
(debug-enable 'backtrace)
(read-enable 'positions)))
(ly:progress "[~A" file-name))
(if (not file-name)
(ly:error (_ "cannot find: ~A") x))
- (primitive-load file-name)
+ (primitive-load-path file-name) ;; to support Guile V2 autocompile
(if (ly:get-option 'verbose)
(ly:progress "]\n"))))
"chord-generic-names.scm"
"stencil.scm"
"markup.scm"
+ "modal-transforms.scm"
"music-functions.scm"
"part-combiner.scm"
"autochange.scm"
"define-music-properties.scm"
"time-signature-settings.scm"
"auto-beam.scm"
- "chord-name.scm"
"bezier-tools.scm"
"parser-ly-from-scheme.scm"
"ly-syntax-constructors.scm"
"define-context-properties.scm"
+ ;; guile 1.9 wants markups defined before referenced
+ "define-markup-commands.scm"
+
+ "chord-name.scm"
"translation-functions.scm"
"script.scm"
"midi.scm"
"define-woodwind-diagrams.scm"
"display-woodwind-diagrams.scm"
"predefined-fretboards.scm"
- "define-markup-commands.scm"
"define-grob-properties.scm"
"define-grobs.scm"
"define-grob-interfaces.scm"
(assoc-get 'total-cells-allocated stats 0))))
(define (dump-profile base last this)
- (let* ((outname (format "~a.profile" (dir-basename base ".ly")))
+ (let* ((outname (format #f "~a.profile" (dir-basename base ".ly")))
(diff (map (lambda (y) (apply - y)) (zip this last))))
(ly:progress "\nWriting timing to ~a..." outname)
(format (open-file outname "w")
".scm"))
(outfile (open-file out-file-name "w")))
(set! gc-dumping #t)
- (display (format "Dumping GC statistics ~a...\n" out-file-name))
- (display (map (lambda (y)
- (let ((x (car y))
- (c (cdr y)))
- (display
- (format "~a (~a) = ~a\n" (object-address x) c x)
- outfile)))
- (filter
- (lambda (x)
- (not (symbol? (car x))))
- protects))
- outfile)
+ (format #t "Dumping GC statistics ~a...\n" out-file-name)
+ (for-each (lambda (y)
+ (let ((x (car y))
+ (c (cdr y)))
+ (format outfile "~a (~a) = ~a\n" (object-address x) c x)))
+ (filter
+ (lambda (x)
+ (not (symbol? (car x))))
+ protects))
(format outfile "\nprotected symbols: ~a\n"
(apply + (map (lambda (obj-count)
(if (symbol? (car obj-count))
(newline outfile)
(let* ((stats (gc-stats)))
(for-each (lambda (sym)
- (display
- (format "~a ~a ~a\n"
- gc-protect-stat-count
- sym
- (assoc-get sym stats "?"))
-
- outfile))
+ (format outfile "~a ~a ~a\n"
+ gc-protect-stat-count
+ sym
+ (assoc-get sym stats "?")))
'(protected-objects bytes-malloced cell-heap-size)))
(set! gc-dumping #f)
(close-port outfile)))
(string-match "^VmData:[ \t]*([0-9]*) kB" l))
lines)))
(mem (string->number (match:substring (car interesting) 1))))
- (display (format "VMDATA: ~a\n" mem))
+ (format #t "VMDATA: ~a\n" mem)
(display (gc-stats))
(if (> mem 100000)
(begin (dump-gc-protects)
(ly:set-option 'log-file "lilypond-multi-run"))
(if (number? joblist)
(begin (ly:set-option
- 'log-file (format "~a-~a"
+ 'log-file (format #f "~a-~a"
(ly:get-option 'log-file) joblist))
(set! files (vector-ref split-todo joblist)))
(begin (ly:progress "\nForking into jobs: ~a\n" joblist)
(lambda (x)
(let* ((job (car x))
(state (cdr x))
- (logfile (format "~a-~a.log"
+ (logfile (format #f "~a-~a.log"
(ly:get-option 'log-file) job))
(log (ly:gulp-file logfile))
(len (string-length log))
(if (status:term-sig state)
(ly:message
"\n\n~a\n"
- (format (_ "job ~a terminated with signal: ~a")
+ (format #f (_ "job ~a terminated with signal: ~a")
job (status:term-sig state)))
(ly:message
(_ "logfile ~a (exit ~a):\n~a")
(ly:exit 1 #f))))))
(if (string-or-symbol? (ly:get-option 'log-file))
- (ly:stderr-redirect (format "~a.log" (ly:get-option 'log-file)) "w"))
+ (ly:stderr-redirect (format #f "~a.log" (ly:get-option 'log-file)) "w"))
(let ((failed (lilypond-all files)))
(if (ly:get-option 'trace-scheme-coverage)
(begin
(ping-log
(if separate-logs
(open-file (if (string-or-symbol? (ly:get-option 'log-file))
- (format "~a.log" (ly:get-option 'log-file))
+ (format #f "~a.log" (ly:get-option 'log-file))
"/dev/stderr") "a") #f))
(do-measurements (ly:get-option 'dump-profile))
(handler (lambda (key failed-file)
(base (dir-basename x ".ly"))
(all-settings (ly:all-options)))
(if separate-logs
- (ly:stderr-redirect (format "~a.log" base) "w"))
+ (ly:stderr-redirect (format #f "~a.log" base) "w"))
(if ping-log
(format ping-log "Processing ~a\n" base))
(if (ly:get-option 'trace-memory-frequency)