diff options
-rwxr-xr-x | scripts/ccwl.in | 50 |
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)) |