#! @GUILE@ -*- scheme -*- !# ;;; ccwl --- Concise Common Workflow Language ;;; Copyright © 2021 Arun Isaac ;;; ;;; This file is part of ccwl. ;;; ;;; ccwl is free software: you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation, either version 3 of the License, or ;;; (at your option) any later version. ;;; ;;; ccwl is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;; General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with ccwl. If not, see . ;;; Commentary: ;; This script compiles a CCWL workflow to CWL. ;;; Code: (use-modules (srfi srfi-28) (srfi srfi-37) (ice-9 match) (ccwl ccwl) (ccwl cwl)) (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* ((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 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))