aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-07-14 17:07:09 +0200
committerLudovic Courtès <ludo@gnu.org>2019-07-15 10:00:12 +0200
commit38302bd9392cc9518b04e2726cf6a38ee75922cc (patch)
tree82a2cde66ee1224057bbbdadfaf84d1153fc81eb
parent2f3c0fb39d8bc6fc9a629b79947691da48ca42e9 (diff)
downloadguix-38302bd9392cc9518b04e2726cf6a38ee75922cc.tar
guix-38302bd9392cc9518b04e2726cf6a38ee75922cc.tar.gz
compile: Report the name of the file that cannot be compiled.
Fixes <https://bugs.gnu.org/36640>. Reported by Robert Vollmert <rob@vllmrt.net>. * guix/build/compile.scm (call/exit-on-exception): Add 'file' parameter and honor it. (exit-on-exception): Likewise. (compile-files): Pass FILE to 'exit-on-exception'.
-rw-r--r--guix/build/compile.scm15
1 files changed, 10 insertions, 5 deletions
diff --git a/guix/build/compile.scm b/guix/build/compile.scm
index 29865f2f2e..c127456fd0 100644
--- a/guix/build/compile.scm
+++ b/guix/build/compile.scm
@@ -129,8 +129,9 @@ front."
(lambda ()
(set! path initial-value)))))
-(define (call/exit-on-exception thunk)
- "Evaluate THUNK and exit right away if an exception is thrown."
+(define (call/exit-on-exception file thunk)
+ "Evaluate THUNK and exit right away if an exception is thrown. Report FILE
+as the file that was being compiled when the exception was thrown."
(catch #t
thunk
(const #f)
@@ -141,15 +142,18 @@ front."
(stack (make-stack #t))
(depth (stack-length stack))
(frame (and (> depth 1) (stack-ref stack 1))))
+ (newline port)
+ (format port "error: failed to compile '~a':~%~%" file)
(false-if-exception (display-backtrace stack port))
(print-exception port frame key args)))
;; Don't go any further.
(primitive-exit 1))))
-(define-syntax-rule (exit-on-exception exp ...)
- "Evaluate EXP and exit if an exception is thrown."
- (call/exit-on-exception (lambda () exp ...)))
+(define-syntax-rule (exit-on-exception file exp ...)
+ "Evaluate EXP and exit if an exception is thrown. Report FILE as the faulty
+file when an exception is thrown."
+ (call/exit-on-exception file (lambda () exp ...)))
(define* (compile-files source-directory build-directory files
#:key
@@ -173,6 +177,7 @@ files are for HOST, a GNU triplet such as \"x86_64-linux-gnu\"."
;; Exit as soon as something goes wrong.
(exit-on-exception
+ file
(with-target host
(lambda ()
(let ((relative (relative-file source-directory file)))