~ chicken-core (chicken-5) 58158284a7a04c895c7182ac3abe27c2741884ef
commit 58158284a7a04c895c7182ac3abe27c2741884ef
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Mon Jan 24 19:21:26 2011 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Mon Jan 24 19:21:26 2011 +0100
compile-file returns #f on error
diff --git a/manual/Unit utils b/manual/Unit utils
index 8c174b1d..9d3186ce 100644
--- a/manual/Unit utils
+++ b/manual/Unit utils
@@ -62,7 +62,7 @@ as additional command line options to {{csc}}. If {{output-file}} is
not given, then the compiled file is stored in a temporary location
and will be deleted when the process exits successfully.
When compilation and loading succeeds, the name of the compiled file
-is returned.
+is returned, otherwise {{#f}} is returned.
Notes:
diff --git a/utils.scm b/utils.scm
index 91e64900..3ca33e23 100644
--- a/utils.scm
+++ b/utils.scm
@@ -68,8 +68,8 @@
(string-concatenate
(map (lambda (c)
(if (or (char-whitespace? c)
- (memq c '(#\# #\" #\' #\` #\´ #\~ #\& #\% #\$ #\! #\* #\; #\< #\> #\\
- #\( #\) #\[ #\] #\{ #\} #\?)))
+ (memq c '(#\# #\" #\' #\` #\´ #\~ #\& #\% #\$ #\! #\* #\;
+ #\< #\> #\\ #\( #\) #\[ #\] #\{ #\} #\?)))
(string #\\ c)
(string c)))
(string->list str)))))))
@@ -83,31 +83,34 @@
(let ((csc (foreign-value "C_CSC_PROGRAM" c-string))
(load-file load)
(path (foreign-value "C_INSTALL_BIN_HOME" c-string)) )
- (lambda (filename #!key (options '()) output-file (load #t))
- (let ((cscpath (or (file-exists? (make-pathname path csc)) "csc"))
- (tmpfile (and (not output-file) (create-temporary-file "so")))
- (crapshell (eq? (build-platform) 'mingw32)))
+ (lambda (filename #!key (options '()) output-file (load #t) verbose)
+ (let* ((cscpath (or (file-exists? (make-pathname path csc)) "csc"))
+ (tmpfile (and (not output-file) (create-temporary-file "so")))
+ (crapshell (eq? (build-platform) 'mingw32))
+ (cmd (sprintf "~a~a -s ~a ~a -o ~a~a"
+ (if crapshell "\"" "")
+ (qs cscpath)
+ (string-intersperse (append (compile-file-options) options) " ")
+ (qs filename)
+ (qs (or output-file tmpfile))
+ (if crapshell "\"" ""))))
(print "; compiling " filename " ...")
- (system*
- "~a~a -s ~a ~a -o ~a~a"
- (if crapshell "\"" "")
- (qs cscpath)
- (string-intersperse (append (compile-file-options) options) " ")
- (qs filename)
- (qs (or output-file tmpfile))
- (if crapshell "\"" ""))
- (unless output-file
- (on-exit
- (lambda ()
- (handle-exceptions ex #f (delete-file* tmpfile)))))
- (when load
- (let ((f (or output-file tmpfile)))
- (handle-exceptions ex
- (begin
- (delete-file* f)
- (abort ex))
- (load-file f)
- f)))))))
+ (when verbose (print " " cmd))
+ (let ((status (system cmd)))
+ (cond ((zero? status)
+ (unless output-file
+ (on-exit
+ (lambda ()
+ (handle-exceptions ex #f (delete-file* tmpfile)))))
+ (when load
+ (let ((f (or output-file tmpfile)))
+ (handle-exceptions ex
+ (begin
+ (delete-file* f)
+ (abort ex))
+ (load-file f)
+ f))))
+ (else #f)))))))
;;; Scan lines until regex or predicate matches
Trap