guix-play/gnu/packages/patches/racket-store-checksum-override.patch
Konrad Hinsen e0b49c785b
gnu: racket: Update to 7.0.
* gnu/packages/scheme.scm (racket): Update to 7.0.
[inputs]: Add libedit.
[arguments]: Update the list of FFI library references to patch.
[source]: Remove 'racket-fix-xform-issue.patch'.
* gnu/packages/patches/racket-store-checksum-override.patch: Adjust.
* gnu/packages/patches/racket-fix-xform-issue.patch: Delete file.
* gnu/local.mk: Adjust accordingly.

Signed-off-by: Leo Famulari <leo@famulari.name>
2018-08-16 18:36:09 -04:00

50 lines
2.0 KiB
Diff

Racket uses checksums to test if it needs to recompile its source
files to bytecode. If Racket is updated by grafting, the source and
bytecode files get updated, but the checksum stays the same. Since
the checksum no longer matches the source file, Racket tries to
regenerate the bytecode and write it to the store, causing errors
because the store is immutable. This patch makes Racket ignore
checksums for files in the store.
See <https://debbugs.gnu.org/30680> for details.
---
collects/compiler/private/cm-minimal.rkt | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/collects/compiler/private/cm-minimal.rkt b/collects/compiler/private/cm-minimal.rkt
index a5a5407..15af6b8 100644
--- a/collects/compiler/private/cm-minimal.rkt
+++ b/collects/compiler/private/cm-minimal.rkt
@@ -7,6 +7,7 @@
racket/list
racket/path
racket/promise
+ racket/string
openssl/sha1
setup/collects
compiler/compilation-path
@@ -543,6 +544,10 @@
#f
(list src-hash recorded-hash)))
+(define (store-reference? path)
+ (let ([store-prefix (or (getenv "NIX_STORE") "/gnu/store")])
+ (string-prefix? (path->string path) store-prefix)))
+
(define (rkt->ss p)
(if (path-has-extension? p #".rkt")
(path-replace-extension p #".ss")
@@ -595,7 +600,8 @@
(trace-printf "newer src... ~a > ~a" path-time path-zo-time)
;; If `sha1-only?', then `maybe-compile-zo' returns a #f or thunk:
(maybe-compile-zo sha1-only? deps path->mode roots path orig-path read-src-syntax up-to-date collection-cache new-seen)]
- [(different-source-sha1-and-dep-recorded path deps)
+ [(and (not (store-reference? path))
+ (different-source-sha1-and-dep-recorded path deps))
=> (lambda (difference)
(trace-printf "different src hash... ~a" difference)
;; If `sha1-only?', then `maybe-compile-zo' returns a #f or thunk:
--
2.18.0