GNU bug report logs - #66864
emacs-build-system builds .eln-files with mismatching path-hashes

Previous Next

Package: guix;

Reported by: Mekeor Melire <mekeor <at> posteo.de>

Date: Wed, 1 Nov 2023 00:39:01 UTC

Severity: normal

Full log


View this message in rfc822 format

From: Mekeor Melire <mekeor <at> posteo.de>
To: 66864 <at> debbugs.gnu.org
Cc: dev <at> jpoiret.xyz, cox.katherine.e+guix <at> gmail.com, liliana.prikler <at> gmail.com, andrew <at> trop.in
Subject: bug#66864: emacs-build-system builds .eln-files with mismatching path-hashes
Date: Tue, 31 Oct 2023 23:49:49 +0000
BUG EXPLANATION

Emacs's natively-compiled .eln-files have a basename following the pattern "{feature-name}-{path-hash}-{content-hash}.eln". [0]

Guix' emacs-build-system is used to build Emacs-related packages. By 
default, it uses the "emacs-minimal" package during build, which 
does not support native-compilation. But if you replace the 
"emacs-minimal" input with "emacs-no-x", e.g. by using 
--with-input=emacs-minimal=emacs-no-x, then emacs-build-system 
will make use of emacs-no-x' support of native-compilation [1]: 
The build will contain .eln-files.

Hereby I'd like to report the bug that consists of mismatched path-hashes in the .eln-files that builds of Emacs-related packages contain when build with emacs-no-x (or any other Emacs that supports native compilation).

BUG REPRODUCTION

To reproduce this bug follow the following steps. Please note that guix-shell seems to leak .eln-files. (This should be reported as 
another bug.) That why the reproduction steps avoid guix-shell. 
Instead, we'll work with the current user profile.

Delete Emacs' eln-cache (so that we can later see if new 
.eln-files have been generated):

	rm -rf ~/.emacs.d/eln-cache

Remove all Emacs- and Emacs-related packages from Guix profile:

	guix package -I | cut -f 4 | grep emacs | xargs guix remove

Install Emacs and emacs-unfill, as exemplary package, while 
replacing input "emacs-minimal" with "emacs", so that .eln-files 
are generated during the build:

	guix install emacs emacs-unfill 
	--with-input=emacs-minimal=emacs

Launch the freshly installed Emacs and load the "unfill" package. 
If the .eln-files that the emacs-unfill package provides match 
Emacs' expectations (path- and content-hash), it'll use it; 
otherwise, Emacs will compile a new .eln-file and save it into 
~/.emacs.d/eln-cache/*/unfill-{path-hash}-{content-hash}.eln.

	emacs -q --eval "(require 'unfill)"

Close Emacs after some seconds. Now determine the path-hash from 
Guix' build:

	basename 
	~/.guix-profile/lib/emacs/native-site-lisp/*/unfill-*.eln \
	  | cut -d - -f 2

Determine the path-hash from Emacs' native-compilation, which 
apparently has happened:

	basename ~/.emacs.d/eln-cache/*/unfill*.eln \
	  | cut -d - -f 2

The path-hashes from the last two steps are not equal.

BUG SOLUTION HINTS

In the #guix:libera.chat IRC channel, jpoiret pointed out: "the .eln file hash problem is due to grafts, grafts change the 
final output name, but they can't also update the file hashes... 
we'd need to modify emacs' behavior for this to work".

CITATIONS

[0]: Emacs' source code documents the meaning of the two hashes here: https://git.sv.gnu.org/cgit/emacs.git/tree/src/comp.c?h=194a8f5c1406dd7e762376bdfde78d1b7d01b6b1#n4405

[1]: Here you can see that emacs-no-x supports native-compilation unlike emacs-minimal: https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/emacs.scm?h=92913703448c8e1a488ab066f60741262cdbf923#n294




This bug report was last modified 1 year and 273 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.