Subject: Poor error message on missing file using substitute*

From: Maxim Cournoyer <[email-masked]>
Date: Mon, 11 Jul 2022 18:16:25 -0400

Hello Guix,

When substitute* encounters a nonexistent file, the error is reported to
the guix CLI like so:

--8<---------------cut here---------------start------------->8---
error: in phase 'bake-tor': uncaught exception:
system-error "mkstemp" "~A" ("No such file or directory") (2) 
phase `bake-tor' failed after 0.0 seconds
Backtrace:
          11 (primitive-load "/gnu/store/0i9iay6rahmps8by40aja6qz1fv…")
In guix/build/gnu-build-system.scm:
    906:2 10 (gnu-build #:source _ #:outputs _ #:inputs _ #:phases . #)
In ice-9/boot-9.scm:
  1752:10  9 (with-exception-handler _ _ #:unwind? _ # _)
In srfi/srfi-1.scm:
    634:9  8 (for-each #<procedure 7ffff49ef640 at guix/build/gnu-b…> …)
In ice-9/boot-9.scm:
  1752:10  7 (with-exception-handler _ _ #:unwind? _ # _)
In guix/build/gnu-build-system.scm:
   927:23  6 (_)
In ice-9/eval.scm:
    619:8  5 (_ #(#(#<directory (guile-user) 7ffff5fdbc80>) (# # …)))
In srfi/srfi-1.scm:
    634:9  4 (for-each #<procedure substitute-one-file (a)> _)
In guix/build/utils.scm:
   843:19  3 (with-atomic-file-replacement "desktop/src/onionshare/…" …)
In unknown file:
           2 (mkstemp! "desktop/src/onionshare/gui_common.py.XXXXXX" #)
In ice-9/boot-9.scm:
  1685:16  1 (raise-exception _ #:continuable? _)
  1685:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure mkstemp: No such file or directory
note: keeping build directory `/tmp/guix-build-onionshare-cli-2.5.drv-0'
--8<---------------cut here---------------end--------------->8---

The main error message, "system-error "mkstemp" "~A" ("No such file or
directory") (2)" is malformed and doesn't report the actual file which
is missing; one must decipher the backtrace for clues as to which file
caused the error.

We should improve it :-).

Maxim