From mboxrd@z Thu Jan 1 00:00:00 1970 From: Timothy Sample Subject: bug#30680: [PATCH] Patch Racket to fix bug #30680 Date: Sun, 12 Aug 2018 16:51:29 -0400 Message-ID: <874lfzb966.fsf@ngyro.com> References: <87r2j3bfy0.fsf@ngyro.com> <87lg9bfhm8.fsf@dustycloud.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:36824) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1foxLJ-0007d4-MA for bug-guix@gnu.org; Sun, 12 Aug 2018 16:52:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1foxLG-0007vQ-GW for bug-guix@gnu.org; Sun, 12 Aug 2018 16:52:05 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:44045) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1foxLG-0007ub-Ab for bug-guix@gnu.org; Sun, 12 Aug 2018 16:52:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1foxLF-0004Pf-Na for bug-guix@gnu.org; Sun, 12 Aug 2018 16:52:01 -0400 Sender: "Debbugs-submit" Resent-Message-ID: In-Reply-To: <87lg9bfhm8.fsf@dustycloud.org> (Christopher Lemmer Webber's message of "Sun, 12 Aug 2018 16:35:27 -0400") List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: Christopher Lemmer Webber Cc: guix-patches@gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Christopher Lemmer Webber writes: > Timothy Sample writes: > >> Hi Guix, >> >> (Patch is attached below.) >> >> This patch fixes . 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 >> =E2=80=9Csetup=E2=80=9D library. When deciding whether to use a bytecod= e file during >> evaluation, it does not verify the checksum. That=E2=80=99s why only the >> =E2=80=9Csetup=E2=80=9D code is patched. >> >> As a side note, both GDB and Go have similar problems: >> >> =E2=80=A2 >> =E2=80=A2 >> >> 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: > > --=3D-=3D-=3D > Content-Type: message/external-body; > name=3D"/home/samplet/code/guix-wip-racket/0001-gnu-racket-Ignore-byteco= de-checksums-in-the-store.patch"; > access-type=3Dlocal-file > > Content-Type: text/x-patch > Content-ID: <87pnynbfy0.fsf@ngyro.com> > Content-Transfer-Encoding: binary > > > > --=3D-=3D-=3D > > 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* --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-gnu-racket-Ignore-bytecode-checksums-in-the-store.patch Content-Description: Racket patch >From 69383706548fadf550c84b3f0d07fc55d1c67858 Mon Sep 17 00:00:00 2001 From: Timothy Sample Date: Sun, 12 Aug 2018 11:12:38 -0400 Subject: [PATCH] gnu: racket: Ignore bytecode checksums in the store. Fixes . * 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 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 --=-=-=--