When a package recipe specifies as input a non-existing output of a package, the build process fails with a rather unhelpful late error message.
The following is the output of building a package that depends on the "bin" output of libtool, which has since been removed. ~~~~~ [rwurmus@workstation:~/code/guix] (599) $ ./pre-inst-env guix build ijs Backtrace: In ice-9/boot-9.scm: 157: 18 [catch #t #<catch-closure 10e4d60> ...] In unknown file: ?: 17 [apply-smob/1 #<catch-closure 10e4d60>] In ice-9/boot-9.scm: 63: 16 [call-with-prompt prompt0 ...] In ice-9/eval.scm: 432: 15 [eval # #] In ice-9/boot-9.scm: 2401: 14 [save-module-excursion #<procedure 1100940 at ice-9/boot-9.scm:4045:3 ()>] 4050: 13 [#<procedure 1100940 at ice-9/boot-9.scm:4045:3 ()>] 1724: 12 [%start-stack load-stack ...] 1729: 11 [#<procedure 1118ea0 ()>] In unknown file: ?: 10 [primitive-load "/home/rwurmus/code/guix/scripts/guix"] In guix/ui.scm: 787: 9 [run-guix-command build "ijs"] In ice-9/boot-9.scm: 157: 8 [catch srfi-34 #<procedure 1872840 at guix/ui.scm:218:2 ()> ...] 157: 7 [catch system-error ...] In guix/scripts/build.scm: 436: 6 [#<procedure 1872860 at guix/scripts/build.scm:422:2 ()>] In guix/ui.scm: 307: 5 [show-what-to-build #<build-daemon 256.14 17d7200> (#) #:dry-run? ...] In guix/derivations.scm: 226: 4 [substitution-oracle #<build-daemon 256.14 17d7200> (#)] In guix/store.scm: 705: 3 [substitutable-paths # #] In srfi/srfi-1.scm: 619: 2 [for-each #<procedure 383ed80 at guix/serialization.scm:118:12 (t-3793)> #] In guix/serialization.scm: 85: 1 [write-string #f #<input-output: socket 10>] In unknown file: ?: 0 [string->utf8 #f] ERROR: In procedure string->utf8: ERROR: In procedure string->utf8: Wrong type argument in position 1 (expecting string): #f ~~~~~ The error message is triggered by an unexpected #f in a long list of paths. It would be more helpful if an earlier error was produced that indicates that the cause is a non-existing package output.