summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2021-10-12 15:27:37 +0530
committerArun Isaac2021-10-12 16:17:02 +0530
commite553d183d0468cb67c0aa850538b886ed557635d (patch)
tree1914f6840a89b9d275d0e607a48ef0cdf2bb6de0
parentc3077419d1a6dc2a735fb3408aaf4842a46ea833 (diff)
downloadccwl-e553d183d0468cb67c0aa850538b886ed557635d.tar.gz
ccwl-e553d183d0468cb67c0aa850538b886ed557635d.tar.lz
ccwl-e553d183d0468cb67c0aa850538b886ed557635d.zip
scripts: Print usage information on --help and incorrect usage.
* scripts/ccwl.in: Import (srfi srfi-28).
(invalid-operand): New function.
(%help-option): New variable.
(main): Print usage information on --help and incorrect usage.
-rwxr-xr-xscripts/ccwl.in50
1 files changed, 42 insertions, 8 deletions
diff --git a/scripts/ccwl.in b/scripts/ccwl.in
index ec5aa32..d47b64b 100755
--- a/scripts/ccwl.in
+++ b/scripts/ccwl.in
@@ -25,7 +25,8 @@
 
 ;;; Code:
 
-(use-modules (srfi srfi-37)
+(use-modules (srfi srfi-28)
+             (srfi srfi-37)
              (ice-9 match)
              (ccwl ccwl)
              (ccwl cwl))
@@ -33,24 +34,57 @@
 (define (invalid-option opt name arg result)
   (error "Invalid option" name))
 
+(define (invalid-operand arg result)
+  (error "Invalid argument" arg))
+
+(define %help-option
+  (option (list "help") #f #t
+          (lambda (opt name arg result)
+            (acons 'help #t result))))
+
 (define main
   (match-lambda*
-    ((_ "compile" args ...)
+    ((program "compile" args ...)
      (let* ((args (args-fold args
-                             '()
+                             (list %help-option)
                              invalid-option
                              (lambda (arg result)
                                (acons 'source-file arg result))
                              '())))
+       (when (or (assq 'help args)
+                 (not (assq-ref args 'source-file)))
+         (display (format "Usage: ~a compile [OPTIONS] SOURCE-FILE
+Compile SOURCE-FILE.
+
+"
+                          program)
+                  (current-error-port))
+         (exit (assq 'help args)))
        ;; FIXME: Compiling ccwl files fails since the workflow macro is
        ;; unable to access command definitions.
        (set! %load-should-auto-compile #f)
        (workflow->cwl (load (canonicalize-path (assq-ref args 'source-file)))
                       (current-output-port))))
-    ((program _ ...)
-     (format (current-error-port)
-             "Usage: ~a compile input-file~%"
-             program)
-     (exit #f))))
+    ((program args ...)
+     (let ((args (args-fold args
+                            (list %help-option)
+                            (lambda (opt name arg result)
+                              result)
+                            (lambda (arg result)
+                              result)
+                            '())))
+       (display (format "Usage: ~a COMMAND [OPTIONS] [ARGS]
+
+COMMAND must be one of the sub-commands listed below:
+
+  compile   compile a workflow
+
+To get usage information for one of these sub-commands, run
+  ~a COMMAND --help
+
+"
+                        program program)
+                (current-error-port))
+       (exit (assq 'help args))))))
 
 (apply main (command-line))