]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4431 / 2: Add ly:system-with-shell for pipe and redirection handling
authorMasamichi Hosoda <trueroad@trueroad.jp>
Mon, 1 Jun 2015 13:12:49 +0000 (22:12 +0900)
committerMasamichi Hosoda <trueroad@trueroad.jp>
Sun, 14 Jun 2015 13:36:29 +0000 (22:36 +0900)
ly:system can't handle pipe and redirection.
This procedure can handle them by using shell.
It also works on MinGW by switching shell.

scm/backend-library.scm

index 2d03394134eda3730b451feb6299a3cc2f298a8d..26987cd099e345f769d6ad94ade4c89302422171 100644 (file)
           ;; hmmm.  what's the best failure option?
           (throw 'ly-file-failed)))))
 
+;; ly:system can't handle pipe and redirection.
+;; This procedure can handle them by using shell.
+(define-public (ly:system-with-shell command)
+  (let ((s (if (eq? PLATFORM 'windows)
+               ;; MinGW (except Cygwin): Use COMSPEC (cmd.exe)
+               ;; FIXME: Command window is displayed briefly
+               (list (or (getenv "COMSPEC")
+                         "cmd.exe")
+                     "/c")
+               ;; POSIX (also Cygwin): Use /bin/sh
+               (list "/bin/sh"
+                     "-c")))
+        (c (list (if (eq? PLATFORM 'windows)
+                     ;; MinGW hack: Double quotes can not be used here.
+                     ;; So we remove them.
+                     ;; FIXME: The filename that contains space
+                     ;; can't be handled.
+                     (string-join (string-split command #\") "")
+                     ;; Other environments (also Cygwin):
+                     ;; Double quotes can be used. Pass through.
+                     command
+                     ))))
+    (ly:system (append s c))))
+
 (define-public (search-executable names)
   (define (helper path lst)
     (if (null? (cdr lst))