]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/lily.scm
Merge branch 'master' of git://git.sv.gnu.org/lilypond
[lilypond.git] / scm / lily.scm
index e03eb489a140fc8070c906822572bd67cc3487e7..a538b3f3edca73f8b0bfea5edd12fb7030073ded 100644 (file)
@@ -2,7 +2,7 @@
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
 ;;;; 
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 ;; Internationalisation: (_i "to be translated") gets an entry in the
@@ -17,8 +17,6 @@
 (read-enable 'positions)
 (debug-enable 'debug)
 
-
-
 (define scheme-options-definitions
   `(
 
@@ -42,12 +40,15 @@ ensure that all refs to parsed objects are dead.  This is an internal option, an
     (debug-skylines #f "debug skylines")
     (delete-intermediate-files #f
                               "delete unusable PostScript files")
-    (dump-profile #f "dump timing information for each file")
+    (dump-profile #f "dump memory and time information for each file")
+    (dump-cpu-profile #f "dump timing information (system-dependent)")
     (dump-signatures #f "dump output signatures of each system.  Used for regression testing.")
     
     (eps-box-padding #f "Pad EPS bounding box left edge.  Guarantee alignment between systems in LaTeX.")
     (gs-load-fonts #f
                   "load fonts via Ghostscript.")
+    (gs-load-lily-fonts #f
+                       "load only lilypond fonts via Ghostscript.")
     (gui #f "running from gui; redirect stderr to log file")
     (help #f "show this help.") 
     (include-book-title-preview #t "include book-titles in preview images.")
@@ -73,6 +74,7 @@ on errors, and print a stack trace.")
 
     (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") 
@@ -105,6 +107,7 @@ on errors, and print a stack trace.")
 
 (use-modules (ice-9 regex)
             (ice-9 safe)
+            (ice-9 format)
             (ice-9 rdelim)
              (ice-9 optargs)
             (oop goops)
@@ -115,6 +118,15 @@ on errors, and print a stack trace.")
             (scm memory-trace)
             (scm coverage)
             )
+(define-public fancy-format format)
+(define-public (ergonomic-simple-format dest . rest)
+  "Like ice-9 format, but without the memory consumption."
+  
+  (if (string? dest)
+      (apply simple-format (cons #f (cons dest rest)))
+      (apply simple-format (cons dest rest))))
+
+(define format ergonomic-simple-format)
 
 ;; my display
 (define-public (myd k v) (display k) (display ": ") (display v) (display ", ")
@@ -147,14 +159,6 @@ on errors, and print a stack trace.")
 
 (define-public parser #f)
 
-(define-public (lilypond-version)
-  (string-join
-   (map (lambda (x) (if (symbol? x)
-                       (symbol->string x)
-                       (number->string x)))
-       (ly:version))
-   "."))
-
 
 ;; TeX C++ code actually hooks into TEX_STRING_HASHLIMIT 
 (define-public TEX_STRING_HASHLIMIT 10000000)
@@ -281,6 +285,14 @@ The syntax is the same as `define*-public'."
                                 safe-objects))
        ,safe-symbol)))
 
+(define-safe-public (lilypond-version)
+  (string-join
+   (map (lambda (x) (if (symbol? x)
+                       (symbol->string x)
+                       (number->string x)))
+       (ly:version))
+   "."))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; init pitch system
 
@@ -399,13 +411,15 @@ The syntax is the same as `define*-public'."
 
 (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)
     (format (open-file outname "w")
            "time: ~a\ncells: ~a\n"
-           (car diff)
+           (if (ly:get-option 'dump-cpu-profile)
+               (car diff)
+               0)
            (cadr diff)
            )))
 
@@ -546,7 +560,6 @@ The syntax is the same as `define*-public'."
 (define-public (lilypond-main files)
   "Entry point for LilyPond."
 
-
   (eval-string (ly:command-line-code))
 
   (if (ly:get-option 'help)
@@ -669,7 +682,7 @@ The syntax is the same as `define*-public'."
           ((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
@@ -728,7 +741,7 @@ The syntax is the same as `define*-public'."
       (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))