rgs args)) (help? (assoc-ref options 'help?)) (warning-level (assoc-ref options 'warning-level)) (optimization-level (assoc-ref options 'optimization-level)) (compile-opts `(#:warnings ,(assoc-ref options 'warnings) ,@(append-map (lambda (opt) (match opt (('optimizations . opts) opts) (_ '()))) options))) (from (or (assoc-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))) (when (or help? (null? input-files)) (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 --r6rs, --r7rs compile in an environment whose default bindings, reader options, and load paths are adapted for specific Scheme standards; see \"R6RS Support\" and \"R7RS Support\" in the manual, for full details -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)) (when (assoc-ref options 'install-r6rs?) (install-r6rs!)) (when (assoc-ref options 'install-r7rs?) (install-r7rs!)) ;; Compute a compiler before changing the load path, for its side ;; effects of loading compiler modules. 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. (compute-compiler from to optimization-level warning-level compile-opts) (set! %load-path (append load-path %load-path)) (set! %load-should-auto-compile #f) (when (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 #:warning-level warning-level #:optimization-level optimization-level #:opts compile-opts)))))) input-files))) (define main compile)