unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
From: Timothy Sample <samplet@ngyro.com>
To: Christopher Lemmer Webber <cwebber@dustycloud.org>
Cc: guix-patches@gnu.org
Subject: bug#30680: [PATCH] Patch Racket to fix bug #30680
Date: Sun, 12 Aug 2018 16:51:29 -0400	[thread overview]
Message-ID: <874lfzb966.fsf@ngyro.com> (raw)
In-Reply-To: <87lg9bfhm8.fsf@dustycloud.org> (Christopher Lemmer Webber's message of "Sun, 12 Aug 2018 16:35:27 -0400")

[-- Attachment #1: Type: text/plain, Size: 1683 bytes --]

Christopher Lemmer Webber <cwebber@dustycloud.org> writes:

> Timothy Sample writes:
>
>> Hi Guix,
>>
>> (Patch is attached below.)
>>
>> This patch fixes <https://debbugs.gnu.org/30680>.  It does so by
>> patching Racket to treat store files specially.  I have verified that it
>> both fixes the bug above and still recompiles non-store files.
>>
>> As far as I can tell, Racket only uses these checksums as part of its
>> “setup” library.  When deciding whether to use a bytecode file during
>> evaluation, it does not verify the checksum.  That’s why only the
>> “setup” code is patched.
>>
>> As a side note, both GDB and Go have similar problems:
>>
>>     • <https://debbugs.gnu.org/19973>
>>     • <https://debbugs.gnu.org/25752>
>>
>> If there ever is a more general solution, this patch will no longer be
>> necessary.
>>
>> (Also, Racket takes a bit of time to build, so reviewers beware!)
>>
>>
>> -- Tim
>
> Oh wait... it seems like the patch is not actually attached?  I assume
> that must be an error!
>
> Actually if I look at the raw view of the email I see:
>
> --=-=-=
> Content-Type: message/external-body;
>  name="/home/samplet/code/guix-wip-racket/0001-gnu-racket-Ignore-bytecode-checksums-in-the-store.patch";
>  access-type=local-file
>
> Content-Type: text/x-patch
> Content-ID: <87pnynbfy0.fsf@ngyro.com>
> Content-Transfer-Encoding: binary
>
>
>
> --=-=-=
>
> So it looks like it should be attached, but I don't see the file
> contents?
>
> Perhaps this is an error on my end!  But I'm very eager to test this
> patch!

Oops!  My fault.  The patch is attached here.  *crosses fingers*


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Racket patch --]
[-- Type: text/x-patch, Size: 3609 bytes --]

From 69383706548fadf550c84b3f0d07fc55d1c67858 Mon Sep 17 00:00:00 2001
From: Timothy Sample <samplet@ngyro.com>
Date: Sun, 12 Aug 2018 11:12:38 -0400
Subject: [PATCH] gnu: racket: Ignore bytecode checksums in the store.

Fixes <https://debbugs.gnu.org/30680>.

* gnu/packages/patches/racket-store-checksum-override.patch: New file.
* gnu/packages/scheme.scm (racket)[sources]: Add it.
---
 .../racket-store-checksum-override.patch      | 42 +++++++++++++++++++
 gnu/packages/scheme.scm                       |  3 +-
 2 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/racket-store-checksum-override.patch

diff --git a/gnu/packages/patches/racket-store-checksum-override.patch b/gnu/packages/patches/racket-store-checksum-override.patch
new file mode 100644
index 000000000..b22facca0
--- /dev/null
+++ b/gnu/packages/patches/racket-store-checksum-override.patch
@@ -0,0 +1,42 @@
+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.
+
+diff -ruN racket-6.12/collects/compiler/cm.rkt racket-6.12-patched/collects/compiler/cm.rkt
+--- racket-6.12/collects/compiler/cm.rkt	1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12-patched/collects/compiler/cm.rkt	2018-08-12 06:36:46.061142149 -0400
+@@ -7,6 +7,7 @@
+          racket/list
+          racket/path
+          racket/promise
++         racket/string
+          openssl/sha1
+          racket/place
+          setup/collects
+@@ -627,6 +628,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")
+@@ -679,7 +684,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:
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index 4178a45a8..b30245cce 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -421,7 +421,8 @@ implementation techniques and as an expository tool.")
              (patches (search-patches
                        ;; See: https://github.com/racket/racket/issues/1962
                        ;; This can be removed in whatever Racket release comes after 6.12
-                       "racket-fix-xform-issue.patch"))))
+                       "racket-fix-xform-issue.patch"
+                       "racket-store-checksum-override.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
-- 
2.18.0


  reply	other threads:[~2018-08-12 20:52 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-02 16:52 bug#30680: Installation of Racket packages tries to write to the store Konrad Hinsen
2018-08-12 18:25 ` bug#30680: [PATCH] Patch Racket to fix bug #30680 Timothy Sample
2018-08-12 20:35   ` Christopher Lemmer Webber
2018-08-12 20:51     ` Timothy Sample [this message]
2018-08-13 13:56       ` Konrad Hinsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874lfzb966.fsf@ngyro.com \
    --to=samplet@ngyro.com \
    --cc=cwebber@dustycloud.org \
    --cc=guix-patches@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).