;;;; 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)
(read-enable 'positions)
-(debug-enable 'debug)
(define-public PLATFORM
(string->symbol
"Include book titles in preview images.")
(include-eps-fonts #t
"Include fonts in separate-system EPS files.")
+ (include-settings #f
+"Include file for global settings, included before the score is processed.")
(job-count #f
"Process in parallel, using the given number of
jobs.")
(if (defined? 'set-debug-cell-accesses!)
(set-debug-cell-accesses! #f))
- ;(set-debug-cell-accesses! 1000)
+;;(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)
- (ice-9 rdelim)
- (ice-9 optargs)
- (oop goops)
- (srfi srfi-1)
- (srfi srfi-13)
- (srfi srfi-14)
- (scm clip-region)
- (scm memory-trace)
- (scm coverage))
+ (ice-9 safe)
+ (ice-9 format)
+ (ice-9 rdelim)
+ (ice-9 optargs)
+ (oop goops)
+ (srfi srfi-1)
+ (srfi srfi-13)
+ (srfi srfi-14)
+ (scm clip-region)
+ (scm memory-trace)
+ (scm coverage))
+
+(define-public _ gettext)
+;;; 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
+;;
+
+(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).
+;;
(define-public fancy-format
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)))
(if (memq (ly:get-option 'backend) music-string-to-path-backends)
(ly:set-option 'music-strings-to-paths #t))
-(define-public _ gettext)
(define-public (ly:load x)
(let* ((file-name (%search-load-path x)))
(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"))))
(eq? (string-ref file-name 2) #\/))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; If necessary, emulate Guile V2 module_export_all! for Guile V1.8.n
+(cond-expand
+ ((not guile-v2)
+ (define (module-export-all! mod)
+ (define (fresh-interface!)
+ (let ((iface (make-module)))
+ (set-module-name! iface (module-name mod))
+ ;; for guile 2: (set-module-version! iface (module-version mod))
+ (set-module-kind! iface 'interface)
+ (set-module-public-interface! mod iface)
+ iface))
+ (let ((iface (or (module-public-interface mod)
+ (fresh-interface!))))
+ (set-module-obarray! iface (module-obarray mod))))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (type-check-list location signature arguments)
"Typecheck a list of arguments against a list of type predicates.
Print a message at LOCATION if any predicate failed."
'("lily-library.scm"
"file-cache.scm"
"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")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(define* (ly:exit status #:optional (silently #f) )
- "Exit function for lilypond"
- (if (not silently)
- (case status
- ((0) (ly:success "Compilation successfully completed"))
- ((1) (ly:warning "Compilation completed with warnings or errors"))
- (else (ly:message "")))
- )
- (exit status)
- )
+(define* (ly:exit status #:optional (silently #f))
+ "Exit function for lilypond"
+ (if (not silently)
+ (case status
+ ((0) (ly:success (_ "Compilation successfully completed")))
+ ((1) (ly:warning (_ "Compilation completed with warnings or errors")))
+ (else (ly:message ""))))
+ (exit status))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (lilypond-main files)
(string-contains f "lilypond")))))
(if (pair? failed)
(begin (ly:error (_ "failed files: ~S") (string-join failed))
- (ly:exit 1 #f))
+ (ly:exit 1 #f))
(begin
(ly:exit 0 #f)))))
(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))
+ "/dev/stderr") "a") #f))
(do-measurements (ly:get-option 'dump-profile))
(handler (lambda (key failed-file)
(set! failed (append (list failed-file) failed)))))
(ly:reset-all-fonts))))
files)
- ;; we want the failed-files notice in the aggregrate logfile.
+ ;; Ensure a notice re failed files is written to aggregate logfile.
(if ping-log
(format ping-log "Failed files: ~a\n" failed))
(if (ly:get-option 'dump-profile)