c-ref options 'from) 'scheme)) (to (or (assoc-ref options 'to) 'bytecode)) (target (or (assoc-ref options 'target) %host-type)) (input-files (assoc-ref options 'input-files)) (output-file (assoc-ref options 'output-file)) (load-path (assoc-ref options 'load-path))) (if (or help? (null? input-files)) (begin (format #t "Usage: compile [OPTION] FILE... Compile each Guile source file FILE into a Guile object. -h, --help print this help message -L, --load-path=DIR add DIR to the front of the module load path -o, --output=OFILE write output to OFILE -x EXTENSION add EXTENSION to the set of source file extensions -W, --warn=WARNING emit warnings of type WARNING; use `--warn=help' for a list of available warnings -O, --optimize=OPT specify optimization passes to run; use `-Ohelp' for a list of available optimizations -f, --from=LANG specify a source language other than `scheme' -t, --to=LANG specify a target language other than `bytecode' -T, --target=TRIPLET produce bytecode for host TRIPLET Note that auto-compilation will be turned off. Report bugs to <~A>.~%" %guile-bug-report-address) (exit 0))) ;; Load FROM and TO before we have changed the load path. That way, when ;; cross-compiling Guile itself, we can be sure we're loading our own ;; language modules and not those of the Guile being compiled, which may ;; have incompatible .go files. (lookup-language from) (lookup-language to) (set! %load-path (append load-path %load-path)) (set! %load-should-auto-compile #f) (if (and output-file (or (null? input-files) (not (null? (cdr input-files))))) (fail "`-o' option can only be specified " "when compiling a single file")) ;; Install a SIGINT handler. As a side effect, this gives unwind ;; handlers an opportunity to run upon SIGINT; this includes that of ;; 'call-with-output-file/atomic', called by 'compile-file', which ;; removes the temporary output file. (sigaction SIGINT (lambda args (fail "interrupted by the user"))) (for-each (lambda (file) (format #t "wrote `~A'\n" (with-fluids ((*current-warning-prefix* "")) (with-target target (lambda () (compile-file file #:output-file output-file #:from from #:to to #:opts compile-opts)))))) input-files))) (define main compile)