diff --git a/src/cmp/cmpos-run.lsp b/src/cmp/cmpos-run.lsp index 418751c3d..4008b3a6a 100755 --- a/src/cmp/cmpos-run.lsp +++ b/src/cmp/cmpos-run.lsp @@ -51,18 +51,25 @@ (program (car program))) (with-current-directory ;; when compiling ECL itself, we only have low-level functions - ;; available, otherwise we can use run-program and get proper - ;; quoting of arguments - #+ecl-min (multiple-value-bind (output-stream return-status pid) - (si:run-program-inner program args :default nil) - (setf output (collect-lines output-stream)) - (multiple-value-setq (return-status result) - (si:waitpid pid t))) - #-ecl-min (multiple-value-bind (output-stream return-status process-obj) - (ext:run-program program args :wait nil) - (setf output (collect-lines output-stream)) - (multiple-value-setq (return-status result) - (ext:external-process-wait process-obj t))))) + ;; available ... + #+(and ecl-min (not cygwin)) + (multiple-value-bind (output-stream return-status pid) + (si:run-program-inner program args :default nil) + (setf output (collect-lines output-stream)) + (multiple-value-setq (return-status result) + (si:waitpid pid t))) + ;; ... otherwise we can use run-program and get proper + ;; quoting of arguments ... + #+(and (not ecl-min) (not cygwin)) + (multiple-value-bind (output-stream return-status process-obj) + (ext:run-program program args :wait nil) + (setf output (collect-lines output-stream)) + (multiple-value-setq (return-status result) + (ext:external-process-wait process-obj t))) + ;; ... unless we're running on cygwin which has problems with + ;; forking so we have to use si:system + #+cygwin + (setf result (si:system (format nil "~A~{ ~A~}" program args))))) (cond ((null result) (cerror "Continues anyway." "Unable to execute:~%(EXT:RUN-PROGRAM ~S ~S)"