;;;;
;;;; 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"
(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