+(define-public (postscript->ps base-name tmp-name is-eps)
+ (let* ((ps-name (string-append base-name
+ (if is-eps ".eps" ".ps"))))
+ (if (not (equal? ps-name tmp-name))
+ (begin
+ (ly:message (_ "Copying to `~a'...\n") ps-name)
+ (copy-binary-file tmp-name ps-name)))))
+
+(define-public (copy-binary-file from-name to-name)
+ (if (eq? PLATFORM 'windows)
+ ;; MINGW hack: MinGW Guile's copy-file is broken.
+ ;; It opens files by the text mode instead of the binary mode.
+ ;; (It is fixed from Guile 2.0.9.)
+ ;; By the text mode, copied binary files are broken.
+ ;; So, we open files by the binary mode and copy by ourselves.
+ (let ((port-from (open-file from-name "rb"))
+ (port-to (open-file to-name "wb")))
+ (let loop((c (read-char port-from)))
+ (if (eof-object? c)
+ (begin (close port-from)
+ (close port-to))
+ (begin (write-char c port-to)
+ (loop (read-char port-from))))))
+ ;; Cygwin and other platforms:
+ ;; Pass through to copy-file
+ (copy-file from-name to-name)))
+