Hello Guix! tl;dr: The Emacs build system and site-start.el loader are modified so that Emacs packages are installed in their own distinct installation directory. The Emacs packages built with the Emacs built system used to be installed in a sub-directory under the share/emacs/guix.d/ directory, but this was changed in commit 65a7dd2950ca13a8b942b2836260a2192351b271 shortly after having accommodated the site-start.el machinery to enable loading packages from any profile (via the EMACSLOADPATH search path specification). While this change allowed to expose simply and directly the packages found in EMACSLOADPATH, it does introduce the risk of file name collisions when multiple Emacs packages are joined in the same profile, especially with Emacs packages increasing in complexity (e.g., using more than a single .el file!) and expecting to have both their sources and resources extracted under their own nested directory rather than as a flat collection (ELPA, MELPA). One recent example I stumbled on was attempting to use the emacs-yasnippet-snippets package along with emacs-elpy; both wanted to install a 'snippets' directory to share/emacs/site-lisp/snippets, collided and resulted in problems that prove difficult to understand. This is what motivated this patch series, where the site-start.el auxiliary code used for package discovery is extended to support packages installed in their own directory under a 'share/emacs/guix' installation prefix, via Emacs' own package library! The emacs-build-system is updated for this new installation prefix, as well as existing packages and documentation. Parting with a directly usable EMACSLOADPATH means that site-start.el *must* run for packages to appear in the load-path; that means for running a test suite, the -Q or --quick Emacs options cannot be used, since it implies --no-site-file. Benefits of using this approach: + Avoid inter-package file name collisions. + Better integration with user installed packages via M-x package-install. The Guix-installed packages are listed in M-x package-list as 'external'. Cons include: - Slightly more complex loader (although much of it is offloaded to package.el), thus slightly slower (see the comparison below). - Requires to ensure every package's test suite doesn't make use of -Q. In my opinion the benefits outweighs the cons by a comfortable margin, especially with the boring work of adapting the package collection already done. To test the performance of the new approach, the following manifest file was used to test the rebuild of the ~900 Emacs packages making use of the Emacs build system: