Subject: bug#29642: guix 0.14.0 cannot use HTTPS with guile 2.0

From: 藍挺瑋 <[email-masked]>
Date: Sun, 10 Dec 2017 21:05:12 +0800

This problem happens on Fedora 27, which uses Guile 2.0.14.

$ guix package -i hello
The following package will be installed:
   hello	2.10	/gnu/store/pa4w02b89d6sq33840dxfl5vbqbwz5iy-hello-2.10

substitute: Backtrace:
substitute: In ice-9/boot-9.scm:
substitute:  160: 9 [catch #t #<catch-closure 55ef08139900> ...]
substitute: In unknown file:
substitute:    ?: 8 [apply-smob/1 #<catch-closure 55ef08139900>]
substitute: In ice-9/boot-9.scm:
substitute:   66: 7 [call-with-prompt prompt0 ...]
substitute: In ice-9/eval.scm:
substitute:  432: 6 [eval # #]
substitute: In ice-9/boot-9.scm:
substitute: 2412: 5 [save-module-excursion #<procedure 55ef08159900 at
ice-9/boot-9.scm:4084:3 ()>]
substitute: 4089: 4 [#<procedure 55ef08159900 at ice-9/boot-9.scm:4084:3
()>]
substitute: 1734: 3 [%start-stack load-stack ...]
substitute: 1739: 2 [#<procedure 55ef0816dbd0 ()>]
substitute: In unknown file:
substitute:    ?: 1 [primitive-load "/usr/bin/guix"]
substitute: In guix/ui.scm:
substitute: 1452: 0 [run-guix-command substitute "--query"]
substitute:
substitute: guix/ui.scm:1452:12: In procedure run-guix-command:
substitute: guix/ui.scm:1452:12: In procedure setvbuf: Wrong type
argument in position 1 (expecting port that supports 'setvbuf'):
#<input-output: gnutls-session-port 55ef0902fc30>
guix package: error: corrupt input while restoring archive from socket

If I revert commit 866f37f, this problem can be avoided. The commit
(download: Improve efficiency of 'write-request' over TLS.) added the
following code to guix/build/download.scm:

(cond-expand
  (guile-2.0 #f)
  (else (setvbuf record 'line)))

The info page of guile doesn't list 'guile-2.0' feature. I know there is
a feature called 'guile-2.2', but I cannot find 'guile-2.0'.