;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2010 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(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.
+;;
+;; 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
;;
-;; TODO add in modules for V1.8,7 deprecated in V2.0 and integrated
+
+(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).
;;
format)
(define-public (ergonomic-simple-format dest . rest)
- "Like ice-9 format, but without the memory consumption."
+ "Like ice-9's @code{format}, but without the memory consumption."
(if (string? dest)
(apply simple-format (cons #f (cons dest rest)))
(apply simple-format (cons dest rest))))
(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"))))
"define-event-classes.scm"
"define-music-callbacks.scm"
"define-music-types.scm"
+ "define-note-names.scm"
"output-lib.scm"
"c++.scm"
"chord-ignatzek-names.scm"
"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"
"flag-styles.scm"
"fret-diagrams.scm"
+ "tablature.scm"
"harp-pedals.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"
"paper.scm"
"backend-library.scm"
"x11-color.scm"
- "tablature.scm"
;; must be after everything has been defined
"safe-lily.scm"))
(,markup-list? . "markup list")
(,moment-pair? . "pair of moment objects")
(,number-or-grob? . "number or grob")
+ (,number-or-pair? . "number or pair")
(,number-or-string? . "number or string")
(,number-pair? . "pair of numbers")
(,rhythmic-location? . "rhythmic location")
(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))
- "/dev/tty") "a") #f))
+ (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)
(set! failed (append (list failed-file) failed)))))
(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)