summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ccwl/ccwl.scm28
1 files changed, 28 insertions, 0 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm
index 789e39e..4760fb6 100644
--- a/ccwl/ccwl.scm
+++ b/ccwl/ccwl.scm
@@ -205,3 +205,31 @@
                        (out . ,(list->vector (step-out step)))
                        (run . ,(step-run step))))
                    steps))))
+(define (output->cwl output)
+  `(,(output-id output)
+    ,@(filter identity
+              (list (and (output-type output)
+                         (cons 'type (output-type output)))
+                    (and (output-binding output)
+                         (cons 'output-binding (output-binding output)))))
+    ,@(output-other output)))
+
+(define (command->cwl command)
+  `((cwl-version . "v1.1")
+    (class . Command-line-tool)
+    ,@(command-other command)
+    (arguments . ,(list->vector (map (lambda (arg)
+                                       (if (input? arg)
+                                           (string-append "$(inputs." (input-id arg) ")")
+                                           arg))
+                                     (command-args command))))
+    (inputs . ,(map input->tree (append (command-inputs command)
+                                        (if (command-stdin command)
+                                            (list (command-stdin command))
+                                            (list)))))
+    (outputs . ,(map output->cwl (command-outputs command)))
+    ,@(if (command-stdin command)
+          `((stdin . ,(string-append "$(inputs."
+                                     (input-id (command-stdin command))
+                                     ".path)")))
+          '())))