Subject: gnu/ci.go: Embeds build path, breaking reproducible builds
From: Vagrant Cascadian <[email-masked]>
To: [email-masked]
Date: Mon, 23 Nov 2020 20:19:54 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Something in gnu/ci.scm is embedding the build path when compiled into
gnu/ci.go, as can be seen:

  https://tests.reproducible-builds.org/debian/rb-pkg/experimental/amd64/diffoscope-results/guix.html

  ./usr/lib/x86_64-linux-gnu/guile/3.0/site-ccache/gnu/ci.go
  strings --all --bytes=8 {}
  Offset 85, 15 lines modified	Offset 85, 15 lines modified
  ...
  92 	/build/1st/guix-1.2.0~rc2/gnu/ci.scm	92 	/build/2/guix-1.2.0~rc2/2nd/gnu/ci.scm

While guix builds of guix are typically built with a consistent build
path, it would be nice to fix this issue for other environments where
the build path may vary between builds.

My *wild* guess is it maybe has something to do with the use of
canonicalize-path:

  (define (find-current-checkout arguments)
  "Find the first checkout of ARGUMENTS that provided the current file.
Return #f if no such checkout is found."
  (let ((current-root
         (canonicalize-path
          (string-append (dirname (current-filename)) "/.."))))
    (find (lambda (argument)
            (and=> (assq-ref argument 'file-name)
                   (lambda (name)
                     (string=? name current-root)))) arguments)))

Either directly or indirectly... does canonicalize-path resolve at build
time? run time? somewhere in-between? Or is this a red herring, and
something else entirely is responsible? I'll let a competent schemer
ponder this! :)

Thanks for all your help!

live well,
  vagrant