Subject: bug#37527: [PATCH] Install C source code for for debugging help

From: Michael Albinus <[email-masked]>
Date: Mon, 07 Oct 2019 17:17:54 +0200

Paul Eggert <[email-masked]> writes:

Hi Paul,

> On 10/4/19 2:20 AM, Michael Albinus wrote:
>
>> I know that the command installs the emacs-debuginfo package. I haven't
>> found a command, which installs the emacs-debugsource package
>> only. Could you please help me here?
>
> Sorry, as far as I know there isn't a convenient way to do it. Such a
> command was suggested here:
>
> https://bugzilla.redhat.com/1494628#c9
>
> but as far as I know it was never implemented. Presumably one can do
> it by installing the debugsource packages by hand (e.g., see
> <https://fedoraproject.org/wiki/StackTraces> and look for "minimal
> set" and for "manually") but I haven't done this.
>
>>> Also, on Fedora at least, the debugsource packages are regularly
>>> out-of-sync with the main packages distributed by the Fedora servers,
>>> so the suggested approach is unreliable when Emacs is patched. This is
>>> worth mentioning as well.
>> That I don't understand completely. Aren't the debug* packages
>> intended
>> to be realeased under the same name+version as the binary packages? And
>> shouldn't they be in sync then?
>
> They should be in sync, but in practice for me they have not
> been. There can be nontrivial delay between the installation of an
> executable package and the installation of the corresponding
> debuginfo/debugsource packages. I don't know why this is. Possibly it
> has something to do with the DNF configuration files (I haven't
> changed mine, as far as I can recall). FWIW, I don't currently have a
> mismatch now (I just checked).

The text mentions now, that the installed Emacs and Emacs source package
shall run the same version.

> I update by running the command 'dnf --enablerepo=updates-debuginfo
> update', by the way. Which reminds me, we should put into our
> instructions that one must enable the debuginfo repo, as that's not
> the default.

Yes. Since people tend to forget this, it might be better to enable it
permanently via 'dnf config-manager --set-enabled updates-debuginfo'. And
then one could install the Emacs source package directly, as 'dnf
install emacs-debugsource'. I've adapted the text accordingly.

People who use the Emacs source package shall enable the debuginfo
repository anyway, to get the proper version during

>> The main intention of this discussion is to have access to Emacs C
>> sources via main distributions. Whatever we change in Emacs releases
>> doesn't matter; it counts only what the major distributions
>> offer.
>
> I don't follow this point. If we install a new file foo.el the major
> distributions will pick that up automatically. They will also pick it
> up if we install a new file foo.c. It's just a file.

Yes. But foo.c will go into the Emacs source package.

>> Shouldn't we contact them (at least Debian-based and Red
>> Hat-based distributions), and ask the maintainers what they would expect
>> from us to make access to the C sources more simple? And maybe they have
>> also descriptions, which fit better than what I have compiled.
>
> My impression is that it will be a hassle for us to track all the
> major distributions and how they do it, since they don't do it in the
> same way and they occasionally change what they do. Plus, we'll have
> to tell people to modify their DNF configurations (or similar
> configurations for other distros). This sounds like quite a pain for
> everyone concerned.

Again, I doubt that major distributions will provide C-source files
another way than via Emacs source packages. So we must describe how to
get them (that's this thread about), and maybe we could arrange with the
distoro's maintainers simper ways.

Attached the current version of my patch.

diff --git a/INSTALL b/INSTALL
index 86f9e0080c..d159f2ef9a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -206,7 +206,7 @@ need to compile it.  For example, to compile Emacs with support for X
 and graphics libraries, you may need to install the X development
 package(s), and development versions of the jpeg, png, etc. packages.

-The names of the packages that you need varies according to the
+The names of the packages that you need vary according to the
 GNU/Linux distribution that you use, and the options that you want to
 configure Emacs with.  On Debian-based systems, you can install all the
 packages needed to build the installed version of Emacs with a command
@@ -214,6 +214,42 @@ like 'apt-get build-dep emacs' (on older systems, replace 'emacs' with
 eg 'emacs25').  On Red Hat-based systems, the corresponding command is
 'dnf builddep emacs' (on older systems, use 'yum-builddep' instead).

+* GNU/Linux source and debug packages
+
+Many GNU/Linux systems provide separate packages containing the
+sources and debug symbols of Emacs.  They are useful if you want to
+check the source code of Emacs primitive functions or debug Emacs on
+the C level.
+
+The names of the packages that you need vary according to the
+GNU/Linux distribution that you use.  On Debian-based systems, you can
+install a source package of Emacs with a command like 'apt-get source
+emacs' (on older systems, replace 'emacs' with eg 'emacs25').  The
+target directory for unpacking the source tree is the current
+directory.  On Red Hat-based systems, the corresponding command is
+'dnf install emacs-debugsource', with target directory /usr/src/debug
+(this requires to add the *-debuginfo repositories first, via 'dnf
+config-manager --set-enabled fedora-debuginfo updates-debuginfo').
+
+Once you have installed the source package, for example at
+/path/to/emacs-26.1, add the following line to your startup file:
+
+     (setq find-function-C-source-directory
+           "/path/to/emacs-26.1/src")
+
+The installation directory of the Emacs source package will contain
+the exact package name and version number Emacs is installed on your
+system.  If a new Emacs package is installed, the source package must
+be reinstalled as well, and the setting in your startup file must be
+updated.
+
+Emacs debugging symbols are distributed by a debug package.  It does
+not exist for every released Emacs package, this depends on the
+distribution.  On Debian-based systems, you can install a debug
+package of Emacs with a command like 'apt-get install emacs-dbg' (on
+older systems, replace 'emacs' with eg 'emacs25').  On Red Hat-based
+systems, the corresponding command is 'dnf debuginfo-install emacs'.
+

 DETAILED BUILDING AND INSTALLATION:

Best regards, Michael.