;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2005--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2005--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; backend helpers.
-(define-public (ly:system command)
+(define-public (ly:system command . rest)
(let* ((status 0)
(dev-null "/dev/null")
(silenced (if (or (ly:get-option 'verbose)
(format #f "~a > ~a 2>&1 " command dev-null))))
(if (ly:get-option 'verbose)
(ly:message (_ "Invoking `~a'...") command))
-
- (set! status (system silenced))
+
+ (set! status
+ (if (pair? rest)
+ (system-with-env silenced (car rest))
+ (system silenced)))
+
(if (> status 0)
(begin
(ly:message (_ "`~a' failed (~a)") command status)
;; hmmm. what's the best failure option?
(throw 'ly-file-failed)))))
+(define-public (system-with-env cmd env)
+
+ "Execute CMD in fork, with ENV (a list of strings) as the environment"
+ (let*
+ ;; laziness: should use execle?
+
+ ((pid (primitive-fork)))
+ (if (= 0 pid)
+ ;; child
+ (begin
+ (environ env)
+ (system cmd))
+
+ ;; parent
+ (cdr (waitpid pid)))))
+
(define-public (sanitize-command-option str)
"Kill dubious shell quoting"
(define-public (postscript->pdf paper-width paper-height name)
(let* ((pdf-name (string-append
- (basename (basename name ".ps") ".eps")
+ (dir-basename name ".ps" ".eps")
".pdf"))
(is-eps (string-match "\\.eps$" name))
(paper-size-string (if is-eps
" -dEPSCrop "
- (format "-dDEVICEWIDTHPOINTS=~,2f \
--dDEVICEHEIGHTPOINTS=~,2f "
+ (ly:format "-dDEVICEWIDTHPOINTS=~$ \
+-dDEVICEHEIGHTPOINTS=~$ "
paper-width paper-height )))
- (cmd (format #f
+ (cmd (simple-format #f
"~a\
~a\
~a\
"
(search-gs)
(if (ly:get-option 'verbose) "" "-q")
- (if (ly:get-option 'gs-load-fonts)
+ (if (or (ly:get-option 'gs-load-fonts)
+ (ly:get-option 'gs-load-lily-fonts))
+
" -dNOSAFER "
" -dSAFER ")
paper-size-string
(if (eq? PLATFORM 'windows)
(begin
(set! cmd (string-regexp-substitute "=" "#" cmd))
- (set! cmd (string-regexp-substitute "-dSAFER " "" cmd))))
-
- (if (access? pdf-name W_OK)
- (delete-file pdf-name))
+ (set! cmd (string-regexp-substitute "-dSAFER " "" cmd))
+ (if (access? pdf-name W_OK)
+ (delete-file pdf-name))))
(ly:message (_ "Converting to `~a'...") pdf-name)
(ly:progress "\n")
(use-modules (scm ps-to-png))
(define-public (postscript->png resolution paper-width paper-height name)
- ;; Do not try to guess the name of the png file,
- ;; GS produces PNG files like BASE-page%d.png.
- ;;(ly:message (_ "Converting to `~a'...")
- ;; (string-append (basename name ".ps") "-page1.png" )))
(let* ((verbose (ly:get-option 'verbose))
(rename-page-1 #f))
+
+ ;; Do not try to guess the name of the png file,
+ ;; GS produces PNG files like BASE-page%d.png.
(ly:message (_ "Converting to ~a...") "PNG")
(make-ps-images name
#:resolution resolution