* bug#37527: [PATCH] Install C source code for for debugging help @ 2019-09-26 20:07 Paul Eggert 2019-09-27 5:09 ` Eli Zaretskii 2019-09-29 13:02 ` Rohan Hendrik Jotz-Lean 0 siblings, 2 replies; 55+ messages in thread From: Paul Eggert @ 2019-09-26 20:07 UTC (permalink / raw) To: 37527; +Cc: Paul Eggert Without this change, on typical GNU/Linux distributions like Debian, the first button of ‘C-h f car RET’ does not work because the source code for ‘car’ is not installed. Fix this by installing the (compressed) C source code along with the (compressed) Lisp source code that is already installed. This adds about 3 MB (about 2%) to the size of the installed files on my platform. * Makefile.in (install_srcdir, enable_install_srcdir): New macros. (epaths-force): Substitute PATH_SOURCE too. (exp_sourcesrcdir): Install copy of C source code if enable_install_srcdir says to. * configure.ac (install_srcdir): New var. Add support for --disable-install-srcdir (to disable installation of source) and for --enable-install-srcdir='.' (to have Emacs refer to its source dir). * lisp/emacs-lisp/find-func.el (find-function-C-source): Also look for gzipped source files. * src/emacs.c (init_cmdargs): Set source-directory to be the same as installation-directory when running with an uninstalled Emacs. * src/epaths.in (PATH_SOURCE): New macro. * src/lread.c (syms_of_lread): When initializing source-directory, use PATH_SOURCE as-is if it is absolute; otherwise, use it relative to PATH_DUMPLOADSEARCH/.. as before. --- Makefile.in | 25 +++++++++++++++++++++++++ configure.ac | 19 +++++++++++++++++++ etc/NEWS | 6 ++++++ lisp/emacs-lisp/find-func.el | 5 ++++- src/emacs.c | 2 ++ src/epaths.in | 3 +++ src/lread.c | 8 ++++++-- 7 files changed, 65 insertions(+), 3 deletions(-) diff --git a/Makefile.in b/Makefile.in index aa11e6b0b7..6ffb8eb747 100644 --- a/Makefile.in +++ b/Makefile.in @@ -266,6 +266,10 @@ etcdir= # once. archlibdir=@archlibdir@ +# Where to put installed source code, and whether to install it at all. +install_srcdir=@install_srcdir@ +enable_install_srcdir=@enable_install_srcdir@ + # Where to put the etc/DOC file. etcdocdir=@etcdocdir@ @@ -374,6 +378,7 @@ epaths-force: -e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";' \ -e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \ -e 's;\(#.*PATH_GAME\).*$$;\1 $(PATH_GAME);' \ + -e 's;\(#.*PATH_SOURCE\).*$$;\1 "${install_srcdir}";' \ -e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \ ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h @@ -624,6 +629,26 @@ install-arch-indep: done; \ ${GZIP_PROG} -9n "../etc/publicsuffix.txt"; \ } +ifneq ($(enable_install_srcdir),no) + -unset CDPATH; \ + umask 022; $(MKDIR_P) "$(DESTDIR)$(install_srcdir)/src" && \ + exp_sourcesrcdir=`cd "$(DESTDIR)$(install_srcdir)/src" && /bin/pwd` && \ + [ "`cd $(srcdir)/src && /bin/pwd`" = "$$exp_sourcesrcdir" ] || { \ + $(set_installuser); \ + printf 'Copying compressed C sources to %s ...\n' \ + "$(DESTDIR)$(install_srcdir)/src"; \ + for file in `cd $(srcdir) && echo src/*.[cm]`; do \ + installed_file="$(DESTDIR)$(install_srcdir)/$$file" && \ + $(INSTALL_DATA) "$$file" "$$installed_file" && \ + [ -z "$(GZIP_PROG)" ] || { \ + rm -f "$$installed_file.gz" && \ + $(GZIP_PROG) -9n "$$installed_file" && \ + installed_file=$$installed_file.gz; \ + } || exit; \ + chown $$installuser "$$installed_file" || true; \ + done; \ + } +endif -chmod -R a+r "$(DESTDIR)${datadir}/emacs/${version}" ${COPYDESTS} ## The above chmods are needed because "umask 022; tar ..." is not diff --git a/configure.ac b/configure.ac index 7435f2e8da..ac50e6e297 100644 --- a/configure.ac +++ b/configure.ac @@ -194,6 +194,7 @@ lisppath='${locallisppath}:${standardlisppath}' etcdir='${datadir}/emacs/${version}/etc' archlibdir='${libexecdir}/emacs/${version}/${configuration}' +install_srcdir='${datadir}/emacs/${version}' etcdocdir='${datadir}/emacs/${version}/etc' gamedir='${localstatedir}/games/emacs' @@ -540,6 +541,21 @@ AC_DEFUN locallisppath=${enableval} locallisppathset=yes fi) +AC_ARG_ENABLE([install-srcdir], + [AS_HELP_STRING([--disable-install-srcdir], + [do not install low-level Emacs source code useful for debugging. + Use '--enable-install-srcdir=.' to have Emacs refer to the + source directory it was configured from.])], + [], + [enable_install_srcdir=yes]) +case $enable_install_srcdir in + yes | no) ;; + .) install_srcdir=`cd "$srcdir" && /bin/pwd` || + AC_MSG_ERROR([cannot get srcdir name]) + enable_install_srcdir=no;; + *) AC_MSG_ERROR([invalid install-srcdir]);; +esac + AC_ARG_ENABLE(checking, [AS_HELP_STRING([--enable-checking@<:@=LIST@:>@], [enable expensive checks. With LIST, @@ -2061,6 +2077,7 @@ AC_DEFUN dnl This one isn't really used, only archlibdir is. libexecdir="\${ns_appbindir}/libexec" archlibdir="\${ns_appbindir}/libexec" + install_srcdir="\${ns_appresdir}" etcdocdir="\${ns_appresdir}/etc" etcdir="\${ns_appresdir}/etc" dnl FIXME maybe set datarootdir instead. @@ -5211,6 +5228,8 @@ AC_DEFUN AC_SUBST(x_default_search_path) AC_SUBST(etcdir) AC_SUBST(archlibdir) +AC_SUBST([enable_install_srcdir]) +AC_SUBST([install_srcdir]) AC_SUBST(etcdocdir) AC_SUBST(bitmapdir) AC_SUBST(gamedir) diff --git a/etc/NEWS b/etc/NEWS index 0a4ada3cc6..7643905256 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -125,6 +125,12 @@ removed configure options.) ** The distribution tarball now has test cases; 'make check' runs them. This is intended mostly to help developers. +--- +** Emacs now installs a copy of its C source code, used for debugging help. +For example, pressing the first button in the *Help* buffer generated +by 'C-h f car RET' now takes you to a copy of the C-language +implementation of the function 'car'. + --- ** Emacs now requires GTK 2.24 and GTK 3.10 for the GTK 2 and GTK 3 builds respectively. diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index 142c99edd4..2812ae6f22 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el @@ -245,7 +245,10 @@ find-function-C-source (let ((dir (or find-function-C-source-directory (read-directory-name "Emacs C source dir: " nil nil t)))) (setq file (expand-file-name file dir)) - (if (file-readable-p file) + (if (or (file-readable-p file) + (let ((file-gz (concat file ".gz"))) + (and (file-readable-p file-gz) + (setq file file-gz)))) (if (null find-function-C-source-directory) (setq find-function-C-source-directory dir)) (error "The C source file %s is not available" diff --git a/src/emacs.c b/src/emacs.c index 21a05d337e..fa547b59f5 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -522,6 +522,7 @@ init_cmdargs (int argc, char **argv, int skip_args, char const *original_pwd) if (!NILP (etc_exists)) { Vinstallation_directory = Ffile_name_as_directory (dir); + Vsource_directory = Vinstallation_directory; break; } } @@ -547,6 +548,7 @@ init_cmdargs (int argc, char **argv, int skip_args, char const *original_pwd) { tem = Fexpand_file_name (build_string (".."), dir); Vinstallation_directory = Ffile_name_as_directory (tem); + Vsource_directory = Vinstallation_directory; break; } } diff --git a/src/epaths.in b/src/epaths.in index 5fe35b64c8..4e15c3a3d6 100644 --- a/src/epaths.in +++ b/src/epaths.in @@ -73,5 +73,8 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ /* Where Emacs should store game score files. */ #define PATH_GAME "/usr/local/var/games/emacs" +/* Where Emacs should look for installed sources. */ +#define PATH_SOURCE "/usr/local/share/emacs" + /* Where Emacs should look for the application default file. */ #define PATH_X_DEFAULTS "/usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:/usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S" diff --git a/src/lread.c b/src/lread.c index 5000b38a01..849632a7ec 100644 --- a/src/lread.c +++ b/src/lread.c @@ -4979,9 +4979,13 @@ syms_of_lread (void) DEFVAR_LISP ("source-directory", Vsource_directory, doc: /* Directory in which Emacs sources were found when Emacs was built. You cannot count on them to still be there! */); + char const *path_source = PATH_SOURCE; Vsource_directory - = Fexpand_file_name (build_string ("../"), - Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH, 0))); + = (file_name_absolute_p (path_source) + ? build_string (path_source) + : Fexpand_file_name (build_string ("../" PATH_SOURCE), + Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH, + false)))); DEFVAR_LISP ("preloaded-file-list", Vpreloaded_file_list, doc: /* List of files that were preloaded (when dumping Emacs). */); -- 2.21.0 ^ permalink raw reply related [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-26 20:07 bug#37527: [PATCH] Install C source code for for debugging help Paul Eggert @ 2019-09-27 5:09 ` Eli Zaretskii 2019-09-27 6:24 ` Paul Eggert 2019-09-29 13:02 ` Rohan Hendrik Jotz-Lean 1 sibling, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2019-09-27 5:09 UTC (permalink / raw) To: Paul Eggert; +Cc: 37527 > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Thu, 26 Sep 2019 13:07:52 -0700 > Cc: Paul Eggert <eggert@cs.ucla.edu> > > Without this change, on typical GNU/Linux distributions > like Debian, the first button of ‘C-h f car RET’ does not > work because the source code for ‘car’ is not installed. It prompts for the source directory, doesn't it? > Fix this by installing the (compressed) C source code along with > the (compressed) Lisp source code that is already installed. > This adds about 3 MB (about 2%) to the size of the installed files > on my platform. As mentioned on emacs-devel, if the consensus is to install this, I'd like to postpone doing so until the emacs-27 branch is cut. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 5:09 ` Eli Zaretskii @ 2019-09-27 6:24 ` Paul Eggert 2019-09-27 7:21 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2019-09-27 6:24 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 37527 On 9/26/19 10:09 PM, Eli Zaretskii wrote: >> Without this change, on typical GNU/Linux distributions >> like Debian, the first button of ‘C-h f car RET’ does not >> work because the source code for ‘car’ is not installed. > > It prompts for the source directory, doesn't it? Yes, but that's not really a solution. I may not have a copy of the correct version of the source directory on my system, and it may take me some time to figure out where to get it. It might not be available from gnu.org, for example, because the downstream distributor may have modified the Emacs source. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 6:24 ` Paul Eggert @ 2019-09-27 7:21 ` Eli Zaretskii 2019-09-27 8:48 ` Andreas Schwab ` (2 more replies) 0 siblings, 3 replies; 55+ messages in thread From: Eli Zaretskii @ 2019-09-27 7:21 UTC (permalink / raw) To: Paul Eggert; +Cc: 37527 > Cc: 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Thu, 26 Sep 2019 23:24:13 -0700 > > > It prompts for the source directory, doesn't it? > > Yes, but that's not really a solution. I may not have a copy of the correct > version of the source directory on my system, and it may take me some time to > figure out where to get it. I thought major distros offered a source archive as well, as an optional download, don't they? ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 7:21 ` Eli Zaretskii @ 2019-09-27 8:48 ` Andreas Schwab 2019-09-27 8:58 ` Michael Albinus 2019-09-28 5:51 ` Paul Eggert 2 siblings, 0 replies; 55+ messages in thread From: Andreas Schwab @ 2019-09-27 8:48 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Paul Eggert, 37527 On Sep 27 2019, Eli Zaretskii <eliz@gnu.org> wrote: >> Cc: 37527@debbugs.gnu.org >> From: Paul Eggert <eggert@cs.ucla.edu> >> Date: Thu, 26 Sep 2019 23:24:13 -0700 >> >> > It prompts for the source directory, doesn't it? >> >> Yes, but that's not really a solution. I may not have a copy of the correct >> version of the source directory on my system, and it may take me some time to >> figure out where to get it. > > I thought major distros offered a source archive as well, as an > optional download, don't they? The sources are also part of the emacs-debugsource packages. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 7:21 ` Eli Zaretskii 2019-09-27 8:48 ` Andreas Schwab @ 2019-09-27 8:58 ` Michael Albinus 2019-09-27 11:36 ` Eli Zaretskii 2019-09-28 5:51 ` Paul Eggert 2 siblings, 1 reply; 55+ messages in thread From: Michael Albinus @ 2019-09-27 8:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Paul Eggert, 37527 Eli Zaretskii <eliz@gnu.org> writes: >> > It prompts for the source directory, doesn't it? >> >> Yes, but that's not really a solution. I may not have a copy of the correct >> version of the source directory on my system, and it may take me some time to >> figure out where to get it. > > I thought major distros offered a source archive as well, as an > optional download, don't they? They do. But we must document at least, how to make the source tree visible for debug. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 8:58 ` Michael Albinus @ 2019-09-27 11:36 ` Eli Zaretskii 2019-09-27 19:59 ` Michael Albinus 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2019-09-27 11:36 UTC (permalink / raw) To: Michael Albinus; +Cc: eggert, 37527 > From: Michael Albinus <michael.albinus@gmx.de> > Cc: Paul Eggert <eggert@cs.ucla.edu>, 37527@debbugs.gnu.org > Date: Fri, 27 Sep 2019 10:58:11 +0200 > > > I thought major distros offered a source archive as well, as an > > optional download, don't they? > > They do. But we must document at least, how to make the source tree > visible for debug. I don't mind adding documentation, if it's missing, but what does it mean "visible for debug"? What kind of debugging did you have in mind? ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 11:36 ` Eli Zaretskii @ 2019-09-27 19:59 ` Michael Albinus 2019-09-28 5:55 ` Paul Eggert 2019-09-28 6:01 ` Eli Zaretskii 0 siblings, 2 replies; 55+ messages in thread From: Michael Albinus @ 2019-09-27 19:59 UTC (permalink / raw) To: Eli Zaretskii; +Cc: eggert, 37527 [-- Attachment #1: Type: text/plain, Size: 615 bytes --] Eli Zaretskii <eliz@gnu.org> writes: >> > I thought major distros offered a source archive as well, as an >> > optional download, don't they? >> >> They do. But we must document at least, how to make the source tree >> visible for debug. > > I don't mind adding documentation, if it's missing, but what does it > mean "visible for debug"? What kind of debugging did you have in > mind? "Visible for debug" is misleading, because the source packages don't seem to provide symbol tables etc pp. I've just realized. But something like the following, which is very rough written, could be added: [-- Attachment #2: Type: text/plain, Size: 1168 bytes --] diff --git a/INSTALL b/INSTALL index 86f9e0080c..595f711ffc 100644 --- a/INSTALL +++ b/INSTALL @@ -214,6 +214,24 @@ 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 packages + +Many GNU/Linux systems provide separate packages containing the +sources of Emacs. They are useful if you want to check the source +code of Emacs primitive functions, and alike. + +The names of the packages that you need varies according to the +GNU/Linux distribution that you use. On Debian-based systems, you can +install all the packages needed to build the installed version of +Emacs with a command like 'apt-get source' (on older systems, replace +'emacs' with eg 'emacs25'). On Red Hat-based systems, the +corresponding command is <tbd>. + +Once you have installed the source package, for example at +/path/to/emacs-26.1+1, add the following line to your startup file: + + (setq source-directory "/path/to/emacs-26.1+1") + DETAILED BUILDING AND INSTALLATION: [-- Attachment #3: Type: text/plain, Size: 24 bytes --] Best regards, Michael. ^ permalink raw reply related [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 19:59 ` Michael Albinus @ 2019-09-28 5:55 ` Paul Eggert 2019-09-28 7:29 ` Eli Zaretskii 2019-09-28 7:54 ` Michael Albinus 2019-09-28 6:01 ` Eli Zaretskii 1 sibling, 2 replies; 55+ messages in thread From: Paul Eggert @ 2019-09-28 5:55 UTC (permalink / raw) To: Michael Albinus, Eli Zaretskii; +Cc: 37527 On 9/27/19 2:59 PM, Michael Albinus wrote: > But something like the following, which is very rough written, could be > added: Although documenting hacks to work around the problem would be better than nothing, it would not address the problem well. Basically, it would put into an obscure location vague instructions that would have to be adapted by hand in a platform-dependent way, something that would be tricky enough that most users would likely not bother or get wrong. Better would be an approach that just works without additional user effort, such as the approach in the proposed patch. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-28 5:55 ` Paul Eggert @ 2019-09-28 7:29 ` Eli Zaretskii 2019-09-28 7:54 ` Michael Albinus 1 sibling, 0 replies; 55+ messages in thread From: Eli Zaretskii @ 2019-09-28 7:29 UTC (permalink / raw) To: Paul Eggert; +Cc: michael.albinus, 37527 > Cc: 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Sat, 28 Sep 2019 00:55:04 -0500 > > On 9/27/19 2:59 PM, Michael Albinus wrote: > > But something like the following, which is very rough written, could be > > added: > > Although documenting hacks to work around the problem would be better > than nothing, it would not address the problem well. It will do for Emacs 27, because even if we agree to your proposal, it most probably won't be in Emacs 27. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-28 5:55 ` Paul Eggert 2019-09-28 7:29 ` Eli Zaretskii @ 2019-09-28 7:54 ` Michael Albinus 2019-09-29 7:09 ` Paul Eggert 1 sibling, 1 reply; 55+ messages in thread From: Michael Albinus @ 2019-09-28 7:54 UTC (permalink / raw) To: Paul Eggert; +Cc: 37527 Paul Eggert <eggert@cs.ucla.edu> writes: Hi Paul, > Although documenting hacks to work around the problem would be better > than nothing, it would not address the problem well. Basically, it > would put into an obscure location vague instructions that would have > to be adapted by hand in a platform-dependent way, something that > would be tricky enough that most users would likely not bother or get > wrong. We might add support for this. > Better would be an approach that just works without additional > user effort, such as the approach in the proposed patch. The major distributions have decided to separate source packages. Do you believe they will change their approach, after your patch has been applied? Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-28 7:54 ` Michael Albinus @ 2019-09-29 7:09 ` Paul Eggert 0 siblings, 0 replies; 55+ messages in thread From: Paul Eggert @ 2019-09-29 7:09 UTC (permalink / raw) To: Michael Albinus; +Cc: 37527 On 9/28/19 2:54 AM, Michael Albinus wrote: > The major distributions have decided to separate source packages. Do you > believe they will change their approach, after your patch has been > applied? I hope they don't change their approaches, as that would likely be yet another maintenance hassle for us. However, not every distribution has a source-code package so we'll need a backstop approach anyway, and the backstop can be what I suggested. We can also tune Emacs for the major distributions that have such packages, if someone finds the time to do that and if we're willing to maintain the resulting extra complexity; but that won't avoid the need for the backstop. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 19:59 ` Michael Albinus 2019-09-28 5:55 ` Paul Eggert @ 2019-09-28 6:01 ` Eli Zaretskii 2019-09-28 9:11 ` Michael Albinus 1 sibling, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2019-09-28 6:01 UTC (permalink / raw) To: Michael Albinus; +Cc: eggert, 37527 > From: Michael Albinus <michael.albinus@gmx.de> > Cc: eggert@cs.ucla.edu, 37527@debbugs.gnu.org > Date: Fri, 27 Sep 2019 21:59:17 +0200 > > +* GNU/Linux source packages > + > +Many GNU/Linux systems provide separate packages containing the > +sources of Emacs. They are useful if you want to check the source > +code of Emacs primitive functions, and alike. I'd add here "or debug Emacs on the C level". > +The names of the packages that you need varies according to the > +GNU/Linux distribution that you use. On Debian-based systems, you can > +install all the packages needed to build the installed version of > +Emacs with a command like 'apt-get source' (on older systems, replace > +'emacs' with eg 'emacs25'). On Red Hat-based systems, the > +corresponding command is <tbd>. Does this include the emacs-debugsource stuff mentioned by Andreas? If not, I think we should add that. Otherwise, this is fine with me, it can be installed on master right now. Thanks. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-28 6:01 ` Eli Zaretskii @ 2019-09-28 9:11 ` Michael Albinus 2019-09-28 9:43 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Michael Albinus @ 2019-09-28 9:11 UTC (permalink / raw) To: Eli Zaretskii; +Cc: eggert, 37527 Eli Zaretskii <eliz@gnu.org> writes: Hi Eli, >> +* GNU/Linux source packages >> + >> +Many GNU/Linux systems provide separate packages containing the >> +sources of Emacs. They are useful if you want to check the source >> +code of Emacs primitive functions, and alike. > > I'd add here "or debug Emacs on the C level". This would require also the debug package, see below. >> +The names of the packages that you need varies according to the >> +GNU/Linux distribution that you use. On Debian-based systems, you can >> +install all the packages needed to build the installed version of >> +Emacs with a command like 'apt-get source' (on older systems, replace >> +'emacs' with eg 'emacs25'). On Red Hat-based systems, the >> +corresponding command is <tbd>. > > Does this include the emacs-debugsource stuff mentioned by Andreas? > If not, I think we should add that. Not so simple. Debug symbols are packaged in a *-dbg package. Unfortunately, this doesn't exist for every released Emacs version. On Ubuntu 19.04, which I am using, I cannot see any Emacs debug package. On Ubuntu 18.04, the recent LTS version, there is emacs25-dbg 25.2+1-6 "Debugging symbols for emacs25". With Debian, the situation is even worse. Debian 10 (buster) does not offer any Emacs debug package yet. Debian 9 (stretch) offers emacs24-dbg 24.5+1-11+deb9u1 "Debugging symbols for emacs24". Shall we add debug packages to our description, even with this limited availability? > Otherwise, this is fine with me, it can be installed on master right > now. I'll wait until Monday, then I'll have a Fedora machine @work. Good for adding the Red Hat case. > Thanks. Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-28 9:11 ` Michael Albinus @ 2019-09-28 9:43 ` Eli Zaretskii 2019-10-03 13:38 ` Michael Albinus 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2019-09-28 9:43 UTC (permalink / raw) To: Michael Albinus; +Cc: eggert, 37527 > From: Michael Albinus <michael.albinus@gmx.de> > Cc: eggert@cs.ucla.edu, 37527@debbugs.gnu.org > Date: Sat, 28 Sep 2019 11:11:53 +0200 > > > Does this include the emacs-debugsource stuff mentioned by Andreas? > > If not, I think we should add that. > > Not so simple. Debug symbols are packaged in a *-dbg > package. Unfortunately, this doesn't exist for every released Emacs > version. We could qualify by "if those exist for your Emacs distribution" or somesuch. > I'll wait until Monday, then I'll have a Fedora machine @work. Good for > adding the Red Hat case. Thanks. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-28 9:43 ` Eli Zaretskii @ 2019-10-03 13:38 ` Michael Albinus 2019-10-03 16:26 ` Eli Zaretskii ` (2 more replies) 0 siblings, 3 replies; 55+ messages in thread From: Michael Albinus @ 2019-10-03 13:38 UTC (permalink / raw) To: Eli Zaretskii; +Cc: eggert, 37527 [-- Attachment #1: Type: text/plain, Size: 196 bytes --] Eli Zaretskii <eliz@gnu.org> writes: >> I'll wait until Monday, then I'll have a Fedora machine @work. Good for >> adding the Red Hat case. Finally, I've written the following patch. Comments? [-- Attachment #2: Type: text/plain, Size: 1743 bytes --] diff --git a/INSTALL b/INSTALL index 86f9e0080c..efc60bf63d 100644 --- a/INSTALL +++ b/INSTALL @@ -214,6 +214,33 @@ 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 varies 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 debuginfo-install emacs', with target directory /usr/src/debug. + +Once you have installed the source package, for example at +/path/to/emacs-26.1, add the following line to your startup file: + + (setq source-directory "/path/to/emacs-26.1") + +Emacs debugging symbols are distributed by a debug package. It does +not exists 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: [-- Attachment #3: Type: text/plain, Size: 35 bytes --] > Thanks. Best regards, Michael. ^ permalink raw reply related [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 13:38 ` Michael Albinus @ 2019-10-03 16:26 ` Eli Zaretskii 2019-10-04 8:52 ` Michael Albinus 2019-10-03 16:54 ` Basil L. Contovounesios 2019-10-03 21:50 ` Paul Eggert 2 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2019-10-03 16:26 UTC (permalink / raw) To: Michael Albinus; +Cc: eggert, 37527 > From: Michael Albinus <michael.albinus@gmx.de> > Cc: eggert@cs.ucla.edu, 37527@debbugs.gnu.org > Date: Thu, 03 Oct 2019 15:38:32 +0200 > > Finally, I've written the following patch. Comments? Thanks for working on this. > +The names of the packages that you need varies according to the ^^^^^^ "vary", plural. Otherwise, LGTM. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 16:26 ` Eli Zaretskii @ 2019-10-04 8:52 ` Michael Albinus 0 siblings, 0 replies; 55+ messages in thread From: Michael Albinus @ 2019-10-04 8:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: eggert, 37527 Eli Zaretskii <eliz@gnu.org> writes: >> +The names of the packages that you need varies according to the > ^^^^^^ > "vary", plural. Fixed, thanks. > Otherwise, LGTM. Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 13:38 ` Michael Albinus 2019-10-03 16:26 ` Eli Zaretskii @ 2019-10-03 16:54 ` Basil L. Contovounesios 2019-10-04 8:54 ` Michael Albinus 2019-10-03 21:50 ` Paul Eggert 2 siblings, 1 reply; 55+ messages in thread From: Basil L. Contovounesios @ 2019-10-03 16:54 UTC (permalink / raw) To: Michael Albinus; +Cc: eggert, 37527 Just one more minor thing: Michael Albinus <michael.albinus@gmx.de> writes: > +Emacs debugging symbols are distributed by a debug package. It does > +not exists for every released Emacs package, this depends on the ^^^^^^ "exist" Thanks, -- Basil ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 16:54 ` Basil L. Contovounesios @ 2019-10-04 8:54 ` Michael Albinus 0 siblings, 0 replies; 55+ messages in thread From: Michael Albinus @ 2019-10-04 8:54 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: eggert, 37527 "Basil L. Contovounesios" <contovob@tcd.ie> writes: >> +Emacs debugging symbols are distributed by a debug package. It does >> +not exists for every released Emacs package, this depends on the > ^^^^^^ > "exist" Fixed, thanks. > Thanks, Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 13:38 ` Michael Albinus 2019-10-03 16:26 ` Eli Zaretskii 2019-10-03 16:54 ` Basil L. Contovounesios @ 2019-10-03 21:50 ` Paul Eggert 2019-10-03 22:32 ` Glenn Morris 2019-10-04 9:20 ` Michael Albinus 2 siblings, 2 replies; 55+ messages in thread From: Paul Eggert @ 2019-10-03 21:50 UTC (permalink / raw) To: Michael Albinus, Eli Zaretskii; +Cc: 37527 On 10/3/19 6:38 AM, Michael Albinus wrote: > + (setq source-directory "/path/to/emacs-26.1") On Fedora at least, the debug packages you mention do not contain all the Emacs source code; they contain only the source useful for C-level debugging. So the advice should recommend setting find-function-C-source-directory, not source-directory. For example, on Fedora 30 right now, one could put this this into ~/.config/init.el: (setq find-function-C-source-directory "/usr/src/debug/emacs-26.2-1.fc30.x86_64/src") and you could give that as an example. Please also mention that one will need to change init.el each time Fedora issues bugfixes and updates the "-1", or comes out with a new release and updates the "fc30", and that if you share your home directory with some system running some other distro or a different Fedora release then you'll need to have more-complicated code in init.el. It's possible that some distros ship all the Emacs source in their debug packages, in which case the advice should say so and should say what to do in that case too. > On Red Hat-based systems, the corresponding command is > 'dnf debuginfo-install emacs', with target directory /usr/src/debug. That command is intended for installing the emacs-debuginfo package, which differs from the emacs-debugsource package that Emacs needs here. The command installs emacs-debugsource only as a weak dependency and settings in dnf.conf can prevent the command from installing emacs-debugsource at all. It would be helpful to warn about this possibility. 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. I hope this email helps to explain further why patching INSTALL is merely a stopgap, and why we need a better solution in the next Emacs release. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 21:50 ` Paul Eggert @ 2019-10-03 22:32 ` Glenn Morris 2019-10-04 1:28 ` Paul Eggert 2019-10-04 8:57 ` Michael Albinus 2019-10-04 9:20 ` Michael Albinus 1 sibling, 2 replies; 55+ messages in thread From: Glenn Morris @ 2019-10-03 22:32 UTC (permalink / raw) To: Paul Eggert; +Cc: Michael Albinus, 37527 Paul Eggert wrote: > I hope this email helps to explain further why patching INSTALL is > merely a stopgap, and why we need a better solution in the next Emacs > release. IMO if you need to debug Emacs outside the lisp level, you should build it and do so from the source directory. I see no need to start distributing the C source in installations. If any serious debugging is needed, people are usually advised to use unoptimized builds anyway. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 22:32 ` Glenn Morris @ 2019-10-04 1:28 ` Paul Eggert 2019-10-04 8:57 ` Michael Albinus 1 sibling, 0 replies; 55+ messages in thread From: Paul Eggert @ 2019-10-04 1:28 UTC (permalink / raw) To: Glenn Morris; +Cc: Michael Albinus, 37527 On 10/3/19 3:32 PM, Glenn Morris wrote: > IMO if you need to debug Emacs outside the lisp level But I don't normally use the feature to debug Emacs's C code. I use it to understand what the C code will do if some Lisp code calls it, in greater detail than if I just read the doc string. I use the feature in the same way to understand Lisp-implemented functions, too. This aspect of the feature is useful even in prepackaged Emacs distributions where I don't plan to debug or change either the C or the Lisp code. Of course this aspect of the feature is not useful for everybody. However, it is useful for some people and that provides a case for adding it. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 22:32 ` Glenn Morris 2019-10-04 1:28 ` Paul Eggert @ 2019-10-04 8:57 ` Michael Albinus 1 sibling, 0 replies; 55+ messages in thread From: Michael Albinus @ 2019-10-04 8:57 UTC (permalink / raw) To: Glenn Morris; +Cc: Paul Eggert, 37527 Glenn Morris <rgm@gnu.org> writes: Hi Glenn, > IMO if you need to debug Emacs outside the lisp level, you should build > it and do so from the source directory. I see no need to start > distributing the C source in installations. If any serious debugging is > needed, people are usually advised to use unoptimized builds anyway. I agree with you, that Emacs debugging based on distribution source and debug packages might be problematic. As Paul has explained, just the source package is useful for checking the C source code. I've added installation of debug packages because other people found it useful. Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-03 21:50 ` Paul Eggert 2019-10-03 22:32 ` Glenn Morris @ 2019-10-04 9:20 ` Michael Albinus 2019-10-06 7:48 ` Paul Eggert 1 sibling, 1 reply; 55+ messages in thread From: Michael Albinus @ 2019-10-04 9:20 UTC (permalink / raw) To: Paul Eggert; +Cc: 37527 Paul Eggert <eggert@cs.ucla.edu> writes: Hi Paul, > On 10/3/19 6:38 AM, Michael Albinus wrote: >> + (setq source-directory "/path/to/emacs-26.1") > > On Fedora at least, the debug packages you mention do not contain all > the Emacs source code; they contain only the source useful for C-level > debugging. So the advice should recommend setting > find-function-C-source-directory, not source-directory. For example, > on Fedora 30 right now, one could put this this into > ~/.config/init.el: > > (setq find-function-C-source-directory > "/usr/src/debug/emacs-26.2-1.fc30.x86_64/src") Lisp sources are still found via load-path. So it doesn't hurt to set source-directory. But you are right, we shall be precise, so I have changed accordingly. > and you could give that as an example. Please also mention that one > will need to change init.el each time Fedora issues bugfixes and > updates the "-1", or comes out with a new release and updates the > "fc30", and that if you share your home directory with some system > running some other distro or a different Fedora release then you'll > need to have more-complicated code in init.el. Yep. I've added --8<---------------cut here---------------start------------->8--- 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. --8<---------------cut here---------------end--------------->8--- >> On Red Hat-based systems, the corresponding command is >> 'dnf debuginfo-install emacs', with target directory /usr/src/debug. > > That command is intended for installing the emacs-debuginfo package, > which differs from the emacs-debugsource package that Emacs needs > here. The command installs emacs-debugsource only as a weak dependency > and settings in dnf.conf can prevent the command from installing > emacs-debugsource at all. It would be helpful to warn about this > possibility. 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? > 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? > I hope this email helps to explain further why patching INSTALL is > merely a stopgap, and why we need a better solution in the next Emacs > release. 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. 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. Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-04 9:20 ` Michael Albinus @ 2019-10-06 7:48 ` Paul Eggert 2019-10-07 15:17 ` Michael Albinus 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2019-10-06 7:48 UTC (permalink / raw) To: Michael Albinus; +Cc: 37527 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). 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. > 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. > 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. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-06 7:48 ` Paul Eggert @ 2019-10-07 15:17 ` Michael Albinus 2019-10-07 19:48 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Michael Albinus @ 2019-10-07 15:17 UTC (permalink / raw) To: Paul Eggert; +Cc: 37527 [-- Attachment #1: Type: text/plain, Size: 3773 bytes --] Paul Eggert <eggert@cs.ucla.edu> 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. [-- Attachment #2: Type: text/plain, Size: 2792 bytes --] 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: [-- Attachment #3: Type: text/plain, Size: 24 bytes --] Best regards, Michael. ^ permalink raw reply related [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-07 15:17 ` Michael Albinus @ 2019-10-07 19:48 ` Paul Eggert 2019-10-08 7:47 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2019-10-07 19:48 UTC (permalink / raw) To: Michael Albinus; +Cc: 37527 On 10/7/19 8:17 AM, Michael Albinus wrote: > Attached the current version of my patch. Thanks, that doc patch looks good as a stopgap, though I still want something better after Emacs 27 comes out. Is the emacs-26 branch still active and still being merged from? If so, I suggest installing the patch into the emacs-26 branch, since the patch's advice is also good for Emacs 26 and won't break anything. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-07 19:48 ` Paul Eggert @ 2019-10-08 7:47 ` Eli Zaretskii 2019-10-08 9:54 ` Michael Albinus 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2019-10-08 7:47 UTC (permalink / raw) To: Paul Eggert; +Cc: michael.albinus, 37527 > Cc: Eli Zaretskii <eliz@gnu.org>, 37527@debbugs.gnu.org, > Glenn Morris <rgm@gnu.org> > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Mon, 7 Oct 2019 12:48:45 -0700 > > Is the emacs-26 branch still active and still being merged from? It shouldn't be active, we should work only on master now. Although if someone makes some doc change there by mistake, it isn't a catastrophe, it just requires merges that otherwise wouldn't have been necessary. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-08 7:47 ` Eli Zaretskii @ 2019-10-08 9:54 ` Michael Albinus 2019-10-08 11:58 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Michael Albinus @ 2019-10-08 9:54 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Paul Eggert, 37527 Eli Zaretskii <eliz@gnu.org> writes: >> Is the emacs-26 branch still active and still being merged from? > > It shouldn't be active, we should work only on master now. Although > if someone makes some doc change there by mistake, it isn't a > catastrophe, it just requires merges that otherwise wouldn't have been > necessary. I've installed the patch in the master branch. I like also to close this bug, since the proposed initial patch is not applied. Maybe it might need more discussion for Emacs 28, but this shall happen in emacs-devel I believe, in order to be visible for more people. Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-08 9:54 ` Michael Albinus @ 2019-10-08 11:58 ` Eli Zaretskii 2020-01-20 19:12 ` Stefan Kangas 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2019-10-08 11:58 UTC (permalink / raw) To: Michael Albinus; +Cc: eggert, 37527 > From: Michael Albinus <michael.albinus@gmx.de> > Cc: Paul Eggert <eggert@cs.ucla.edu>, 37527@debbugs.gnu.org, rgm@gnu.org > Date: Tue, 08 Oct 2019 11:54:04 +0200 > > I like also to close this bug, since the proposed initial patch is > not applied. Maybe it might need more discussion for Emacs 28, but > this shall happen in emacs-devel I believe, in order to be visible > for more people. the proposed original patch is indeed not applied, but the issue discussed here is not completely resolved. So we could leave the bug open. However, if Paul would like to close it and later reopen or open another one, I don't mind. IOW, I'll leave it to Paul to decide whether to close this bug. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-10-08 11:58 ` Eli Zaretskii @ 2020-01-20 19:12 ` Stefan Kangas 2020-01-21 9:13 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Stefan Kangas @ 2020-01-20 19:12 UTC (permalink / raw) To: Eli Zaretskii; +Cc: eggert, Michael Albinus, 37527 Eli Zaretskii <eliz@gnu.org> writes: >> From: Michael Albinus <michael.albinus@gmx.de> >> Cc: Paul Eggert <eggert@cs.ucla.edu>, 37527@debbugs.gnu.org, rgm@gnu.org >> Date: Tue, 08 Oct 2019 11:54:04 +0200 >> >> I like also to close this bug, since the proposed initial patch is >> not applied. Maybe it might need more discussion for Emacs 28, but >> this shall happen in emacs-devel I believe, in order to be visible >> for more people. > > the proposed original patch is indeed not applied, but the issue > discussed here is not completely resolved. So we could leave the bug > open. However, if Paul would like to close it and later reopen or > open another one, I don't mind. > > IOW, I'll leave it to Paul to decide whether to close this bug. What is the status of this, given that the emacs-27 is now cut? Best regards, Stefan Kangas ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-20 19:12 ` Stefan Kangas @ 2020-01-21 9:13 ` Paul Eggert 2020-01-21 17:02 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2020-01-21 9:13 UTC (permalink / raw) To: Stefan Kangas, Eli Zaretskii; +Cc: Michael Albinus, 37527 [-- Attachment #1: Type: text/plain, Size: 1184 bytes --] On 1/20/20 11:12 AM, Stefan Kangas wrote: > What is the status of this, given that the emacs-27 is now cut? Thanks for reminding me of this problem. The stuff in INSTALL is not quite right - at least, it didn't work for me in Ubuntu 18.04.3 (which is Debian based) due to some problem in my sources.list (which I hadn't messed with, so I guess Ubuntu must differ from Debian here). In contrast, INSTALL is overly complicated for Fedora 31 since it gives a bunch of confusing instructions for sources and debuginfo whereas all I needed to do was 'dnf debuginfo-install emacs' to get all that stuff done. More generally, even if we fix these INSTALL problems, INSTALL won't work for other GNU/Linux distributions, or for non-GNU distributions for that matter. Nor will it work when people install Emacs themselves. And the INSTALL instructions will continue to be complicated and awkward, and will likely need to be maintained as Debian and Red Hat evolve. So we still need something better. I rebased and tweaked the proposed patch (including a revamp of the INSTALL section to try to address some of the abovementioned problems) and am attaching the updated version. [-- Attachment #2: 0001-Install-C-source-code-for-C-h-f-etc.txt --] [-- Type: text/plain, Size: 14246 bytes --] From 74cb99b9c826d81e8d2349b6e6b9c112af306e54 Mon Sep 17 00:00:00 2001 From: Paul Eggert <eggert@cs.ucla.edu> Date: Mon, 20 Jan 2020 23:37:24 -0800 Subject: [PATCH] Install C source code for C-h f etc. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without this change, on typical GNU/Linux distributions like Debian, the first button of ‘C-h f car RET’ does not work because the source code for ‘car’ is not installed (Bug#37527). Fix this by installing the (compressed) C source code alongside the (compressed) Lisp source code that is already installed. This adds about 3 MB (about 2%) to the size of the installed files on my platform. * Makefile.in (install_srcdir, enable_install_srcdir): New macros. (epaths-force): Substitute PATH_SOURCE. (install-srcdir): New rule, that installs a copy of the C source code if enable_install_srcdir says to. (install-arch-indep): Depend on it. * configure.ac (install_srcdir): New var. Add support for --disable-install-srcdir (to disable installation of source) and for --enable-install-srcdir='.' (to have Emacs refer to its source dir). * lisp/emacs-lisp/find-func.el (find-function-C-source): Also look for gzipped source files. * src/emacs.c (init_cmdargs): Set source-directory to be the same as installation-directory when running with an uninstalled Emacs. * src/epaths.in (PATH_SOURCE): New macro. * src/lread.c: Include dosname.h, for IS_ABSOLUTE_FILE_NAME. (syms_of_lread): When initializing source-directory, use PATH_SOURCE as-is if it is absolute; otherwise, use it relative to PATH_DUMPLOADSEARCH/.. as before. --- INSTALL | 65 ++++++++++++++++++------------------ Makefile.in | 32 ++++++++++++++++-- configure.ac | 19 +++++++++++ etc/NEWS | 6 ++++ lisp/emacs-lisp/find-func.el | 5 ++- src/emacs.c | 2 ++ src/epaths.in | 3 ++ src/lread.c | 11 +++--- 8 files changed, 104 insertions(+), 39 deletions(-) diff --git a/INSTALL b/INSTALL index 2d257f9ce6..cb12e4a17a 100644 --- a/INSTALL +++ b/INSTALL @@ -214,41 +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). + +DEBUGGING AN INSTALLED EMACS + +* Installed Emacs source code + +Emacs installs a compressed copy of much of its source code, to make +it easy for users to read the source code of Emacs via commands like +M-x describe-function (C-h f) to display the definition of a function. +This compressed copy ordinarily includes both the Elisp source code +that Emacs is mostly written in, as well as the C source code for the +core Emacs executable. + * 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'. +sources and debug symbols of Emacs. They can help you debug the +installed Emacs on the C level. The procedures for installing these +packages depend on the GNU/Linux system that you use. + +Emacs debugging symbols are distributed by a debug package if one +exists for your system. 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 e.g. 'emacs25'). +On Red Hat-based systems, the corresponding command is 'dnf +debuginfo-install emacs'; this may require adding the *-debuginfo +repositories first, via 'dnf config-manager --set-enabled +fedora-debuginfo updates-debuginfo'. + +Some systems also have an Emacs source package that is also helpful +when debugging the installed Emacs. To unpack an Emacs source package +into the current directory on Debian-based systems, you can use a +command like 'apt-get source emacs' (on older systems, replace 'emacs' +with e.g. 'emacs25'); you may first need to add the appropriate +'source' URIs to your sources.list. On Red Hat-based systems, +installing the debugging symbols automatically installs the +corresponding source package in the appropriate location. DETAILED BUILDING AND INSTALLATION: diff --git a/Makefile.in b/Makefile.in index 2c82c49fba..cadc5dac97 100644 --- a/Makefile.in +++ b/Makefile.in @@ -266,6 +266,10 @@ etcdir= # once. archlibdir=@archlibdir@ +# Where to put installed source code, and whether to install it at all. +install_srcdir=@install_srcdir@ +enable_install_srcdir=@enable_install_srcdir@ + # Where to put the etc/DOC file. etcdocdir=@etcdocdir@ @@ -374,6 +378,7 @@ epaths-force: -e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";' \ -e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \ -e 's;\(#.*PATH_GAME\).*$$;\1 $(PATH_GAME);' \ + -e 's;\(#.*PATH_SOURCE\).*$$;\1 "${install_srcdir}";' \ -e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \ ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h @@ -461,7 +466,7 @@ $(srcdir)/configure: # ==================== Installation ==================== .PHONY: install install-arch-dep install-arch-indep install-etcdoc install-info -.PHONY: install-man install-etc install-strip install-$(NTDIR) +.PHONY: install-man install-srcdir install-etc install-strip install-$(NTDIR) .PHONY: uninstall uninstall-$(NTDIR) ## If we let lib-src do its own installation, that means we @@ -568,7 +573,8 @@ set_installuser= ## work correctly, and therefore no idea when tar can be replaced. ## See also these comments from 2004 about cp -r working fine: ## https://lists.gnu.org/r/autoconf-patches/2004-11/msg00005.html -install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} +install-arch-indep: lisp install-info install-man install-srcdir \ + $(INSTALL_ARCH_INDEP_EXTRA) umask 022 && $(MKDIR_P) "$(DESTDIR)$(includedir)" $(INSTALL_DATA) src/emacs-module.h "$(DESTDIR)$(includedir)/emacs-module.h" -set ${COPYDESTS} ; \ @@ -700,6 +706,28 @@ install-man: ${GZIP_PROG} -9n "$(DESTDIR)${man1dir}/$${dest}" || true; \ done +install-srcdir: +ifneq ($(enable_install_srcdir),no) + -unset CDPATH; \ + umask 022; $(MKDIR_P) "$(DESTDIR)$(install_srcdir)/src" && \ + exp_sourcesrcdir=`cd "$(DESTDIR)$(install_srcdir)/src" && /bin/pwd` && \ + [ "`cd $(srcdir)/src && /bin/pwd`" = "$$exp_sourcesrcdir" ] || { \ + $(set_installuser); \ + printf 'Copying compressed C sources to %s ...\n' \ + "$(DESTDIR)$(install_srcdir)/src"; \ + for file in `cd $(srcdir) && echo src/*.[cm]`; do \ + installed_file="$(DESTDIR)$(install_srcdir)/$$file" && \ + $(INSTALL_DATA) "$$file" "$$installed_file" && \ + [ -z "$(GZIP_PROG)" ] || { \ + rm -f "$$installed_file.gz" && \ + $(GZIP_PROG) -9n "$$installed_file" && \ + installed_file=$$installed_file.gz; \ + } || exit; \ + chown $$installuser "$$installed_file" || true; \ + done; \ + } +endif + ## Install those items from etc/ that need to end up elsewhere. ## If you prefer, choose "emacs22" at installation time. diff --git a/configure.ac b/configure.ac index d7b4d0352c..b4de343371 100644 --- a/configure.ac +++ b/configure.ac @@ -194,6 +194,7 @@ lisppath='${locallisppath}:${standardlisppath}' etcdir='${datadir}/emacs/${version}/etc' archlibdir='${libexecdir}/emacs/${version}/${configuration}' +install_srcdir='${datadir}/emacs/${version}' etcdocdir='${datadir}/emacs/${version}/etc' gamedir='${localstatedir}/games/emacs' @@ -540,6 +541,21 @@ AC_DEFUN locallisppath=${enableval} locallisppathset=yes fi) +AC_ARG_ENABLE([install-srcdir], + [AS_HELP_STRING([--disable-install-srcdir], + [do not install low-level Emacs source code useful for debugging. + Use --enable-install-srcdir='.' to have Emacs refer to the + source directory it was configured from.])], + [], + [enable_install_srcdir=yes]) +case $enable_install_srcdir in + yes | no) ;; + .) install_srcdir=`cd "$srcdir" && /bin/pwd` || + AC_MSG_ERROR([cannot get srcdir name]) + enable_install_srcdir=no;; + *) AC_MSG_ERROR([invalid install-srcdir]);; +esac + AC_ARG_ENABLE(checking, [AS_HELP_STRING([--enable-checking@<:@=LIST@:>@], [enable expensive checks. With LIST, @@ -2048,6 +2064,7 @@ AC_DEFUN dnl This one isn't really used, only archlibdir is. libexecdir="\${ns_appbindir}/libexec" archlibdir="\${ns_appbindir}/libexec" + install_srcdir="\${ns_appresdir}" etcdocdir="\${ns_appresdir}/etc" etcdir="\${ns_appresdir}/etc" dnl FIXME maybe set datarootdir instead. @@ -5230,6 +5247,8 @@ AC_DEFUN AC_SUBST(x_default_search_path) AC_SUBST(etcdir) AC_SUBST(archlibdir) +AC_SUBST([enable_install_srcdir]) +AC_SUBST([install_srcdir]) AC_SUBST(etcdocdir) AC_SUBST(bitmapdir) AC_SUBST(gamedir) diff --git a/etc/NEWS b/etc/NEWS index 7f1f50759e..dde72dea53 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -42,6 +42,12 @@ and 'ftcr' otherwise. You can determine this by checking ** The ftx font backend driver has been removed. It was declared obsolete in Emacs 27.1. +--- +** Emacs now installs a copy of its C source code, used for debugging help. +For example, pressing the first button in the *Help* buffer generated +by 'C-h f car RET' now takes you to a copy of the C-language +implementation of the function 'car'. + \f * Startup Changes in Emacs 28.1 diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index 167ead3ce0..631ecac73f 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el @@ -245,7 +245,10 @@ find-function-C-source (let ((dir (or find-function-C-source-directory (read-directory-name "Emacs C source dir: " nil nil t)))) (setq file (expand-file-name file dir)) - (if (file-readable-p file) + (if (or (file-readable-p file) + (let ((file-gz (concat file ".gz"))) + (and (file-readable-p file-gz) + (setq file file-gz)))) (if (null find-function-C-source-directory) (setq find-function-C-source-directory dir)) (error "The C source file %s is not available" diff --git a/src/emacs.c b/src/emacs.c index c5a760d29f..d847e888b9 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -522,6 +522,7 @@ init_cmdargs (int argc, char **argv, int skip_args, char const *original_pwd) if (!NILP (etc_exists)) { Vinstallation_directory = Ffile_name_as_directory (dir); + Vsource_directory = Vinstallation_directory; break; } } @@ -547,6 +548,7 @@ init_cmdargs (int argc, char **argv, int skip_args, char const *original_pwd) { tem = Fexpand_file_name (build_string (".."), dir); Vinstallation_directory = Ffile_name_as_directory (tem); + Vsource_directory = Vinstallation_directory; break; } } diff --git a/src/epaths.in b/src/epaths.in index 3cadd160ec..b1d20508d5 100644 --- a/src/epaths.in +++ b/src/epaths.in @@ -73,5 +73,8 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ /* Where Emacs should store game score files. */ #define PATH_GAME "/usr/local/var/games/emacs" +/* Where Emacs should look for installed sources. */ +#define PATH_SOURCE "/usr/local/share/emacs" + /* Where Emacs should look for the application default file. */ #define PATH_X_DEFAULTS "/usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:/usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S" diff --git a/src/lread.c b/src/lread.c index 69dd73912b..05afef7ada 100644 --- a/src/lread.c +++ b/src/lread.c @@ -44,6 +44,7 @@ #define DEFINE_SYMBOLS #include "blockinput.h" #include "pdumper.h" #include <c-ctype.h> +#include <dosname.h> #include <vla.h> #ifdef MSDOS @@ -4991,11 +4992,13 @@ syms_of_lread (void) load_convert_to_unibyte = 0; DEFVAR_LISP ("source-directory", Vsource_directory, - doc: /* Directory in which Emacs sources were found when Emacs was built. -You cannot count on them to still be there! */); + doc: /* Directory where Emacs sources are looked for. */); Vsource_directory - = Fexpand_file_name (build_string ("../"), - Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH, 0))); + = (IS_ABSOLUTE_FILE_NAME (PATH_SOURCE) + ? build_string (PATH_SOURCE) + : Fexpand_file_name (build_string ("../" PATH_SOURCE), + Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH, + false)))); DEFVAR_LISP ("preloaded-file-list", Vpreloaded_file_list, doc: /* List of files that were preloaded (when dumping Emacs). */); -- 2.17.1 ^ permalink raw reply related [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-21 9:13 ` Paul Eggert @ 2020-01-21 17:02 ` Eli Zaretskii 2020-01-21 17:48 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2020-01-21 17:02 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: Michael Albinus <michael.albinus@gmx.de>, rgm@gnu.org, > 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Tue, 21 Jan 2020 01:13:53 -0800 > > --- a/src/emacs.c > +++ b/src/emacs.c > @@ -522,6 +522,7 @@ init_cmdargs (int argc, char **argv, int skip_args, char const *original_pwd) > if (!NILP (etc_exists)) > { > Vinstallation_directory = Ffile_name_as_directory (dir); > + Vsource_directory = Vinstallation_directory; > break; > } > } > @@ -547,6 +548,7 @@ init_cmdargs (int argc, char **argv, int skip_args, char const *original_pwd) > { > tem = Fexpand_file_name (build_string (".."), dir); > Vinstallation_directory = Ffile_name_as_directory (tem); > + Vsource_directory = Vinstallation_directory; > break; > } Bother. Should we really step on source-directory like that? What if the original source tree still exists? Maybe it would be safer to introduce a new variable, say, install-source-directory? ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-21 17:02 ` Eli Zaretskii @ 2020-01-21 17:48 ` Paul Eggert 2020-01-21 18:04 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2020-01-21 17:48 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, michael.albinus, 37527 On 1/21/20 9:02 AM, Eli Zaretskii wrote: > Should we really step on source-directory like that? What if > the original source tree still exists? Those assignments occur when you're running out of a just-built Emacs, and the intent is that they set source-directory to the original source tree. They're helpful in a typical just-built case when you haven't installed yet; if we omitted the assignments, C-h f etc. wouldn't find the source code automatically. > Maybe it would be safer to > introduce a new variable, say, install-source-directory? I don't offhand see why that'd be safer. It would be more complicated, and the complexity would make it less safe. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-21 17:48 ` Paul Eggert @ 2020-01-21 18:04 ` Eli Zaretskii 2020-01-22 0:27 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2020-01-21 18:04 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: stefan@marxist.se, michael.albinus@gmx.de, rgm@gnu.org, > 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Tue, 21 Jan 2020 09:48:39 -0800 > > On 1/21/20 9:02 AM, Eli Zaretskii wrote: > > Should we really step on source-directory like that? What if > > the original source tree still exists? > > Those assignments occur when you're running out of a just-built Emacs, and the > intent is that they set source-directory to the original source tree. They're > helpful in a typical just-built case when you haven't installed yet; if we > omitted the assignments, C-h f etc. wouldn't find the source code automatically. > > > Maybe it would be safer to > > introduce a new variable, say, install-source-directory? > > I don't offhand see why that'd be safer. It would be more complicated, and the > complexity would make it less safe. Sorry, I'm probably confused. I thought your patch sets source-directory to point to where the compressed sources will be installed, is that not what it does? If I misunderstood, just ignore that comment. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-21 18:04 ` Eli Zaretskii @ 2020-01-22 0:27 ` Paul Eggert 2020-01-22 3:31 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2020-01-22 0:27 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, michael.albinus, 37527 On 1/21/20 10:04 AM, Eli Zaretskii wrote: > I thought your patch sets > source-directory to point to where the compressed sources will be > installed, is that not what it does? Yes, that's what the patch typically does. However, when Emacs is run out of its original source tree the code snippets you cited override the typical behavior, and set source-directory to be the original source tree instead of to the place where the compressed sources will be installed. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-22 0:27 ` Paul Eggert @ 2020-01-22 3:31 ` Eli Zaretskii 2020-01-23 8:58 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2020-01-22 3:31 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: stefan@marxist.se, michael.albinus@gmx.de, rgm@gnu.org, > 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Tue, 21 Jan 2020 16:27:41 -0800 > > On 1/21/20 10:04 AM, Eli Zaretskii wrote: > > I thought your patch sets > > source-directory to point to where the compressed sources will be > > installed, is that not what it does? > > Yes, that's what the patch typically does. However, when Emacs is run > out of its original source tree the code snippets you cited override the > typical behavior, and set source-directory to be the original source > tree instead of to the place where the compressed sources will be installed. Then I still think an additional variable might be a better solution, because the original source tree might still exist, and so losing the information about its location would be a disadvantage. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-22 3:31 ` Eli Zaretskii @ 2020-01-23 8:58 ` Paul Eggert 2020-01-23 14:23 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2020-01-23 8:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, michael.albinus, 37527 On 1/21/20 7:31 PM, Eli Zaretskii wrote: > Then I still think an additional variable might be a better solution, > because the original source tree might still exist, and so losing the > information about its location would be a disadvantage. ? The code in question does not lose information about the location of the original source tree. On the contrary, it supplies that information. If you're suggesting that every installed Emacs should contain a string pointing to where it was built, I'm not sure that's a good idea. Generally speaking, builds should be reproducible and build products should not contain unimportant information about the build (such as timestamps and whatnot) as that makes it harder to reproduce them later. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-23 8:58 ` Paul Eggert @ 2020-01-23 14:23 ` Eli Zaretskii 2020-01-23 17:42 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2020-01-23 14:23 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: stefan@marxist.se, michael.albinus@gmx.de, rgm@gnu.org, > 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Thu, 23 Jan 2020 00:58:11 -0800 > > On 1/21/20 7:31 PM, Eli Zaretskii wrote: > > Then I still think an additional variable might be a better solution, > > because the original source tree might still exist, and so losing the > > information about its location would be a disadvantage. > > ? The code in question does not lose information about the location of the > original source tree. On the contrary, it supplies that information. If the source tree still exists, the information is already available, it is recorded at build time. > If you're suggesting that every installed Emacs should contain a string pointing > to where it was built, I'm not sure that's a good idea. Generally speaking, > builds should be reproducible and build products should not contain unimportant > information about the build (such as timestamps and whatnot) as that makes it > harder to reproduce them later. Reproducible builds is a separate issue; in a reproducible build no directories should be recorded at build time. Let's consider builds that aren't meant to be reproducible. Let me turn the table and ask: if Emacs was installed with the sources, but the original source tree where it was built still exists, where will source-directory point after your changes? Will it point to the installed sources or to the original source tree? ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-23 14:23 ` Eli Zaretskii @ 2020-01-23 17:42 ` Paul Eggert 2020-01-23 18:24 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2020-01-23 17:42 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, michael.albinus, 37527 On 1/23/20 6:23 AM, Eli Zaretskii wrote: > if Emacs was installed with the > sources, but the original source tree where it was built still exists, > where will source-directory point after your changes? It'll point to the original source tree if you're running Emacs out of the build directory. If you're running Emacs out of the installed directory, it will point to the installed source tree. > Let's consider builds > that aren't meant to be reproducible. Although we can do that, generally speaking it's better when there's no difference between reproducible and irreproducible builds, as that's one less thing to worry about when maintaining and debugging. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-23 17:42 ` Paul Eggert @ 2020-01-23 18:24 ` Eli Zaretskii 2020-01-25 0:47 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2020-01-23 18:24 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: stefan@marxist.se, michael.albinus@gmx.de, rgm@gnu.org, > 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Thu, 23 Jan 2020 09:42:10 -0800 > > On 1/23/20 6:23 AM, Eli Zaretskii wrote: > > if Emacs was installed with the > > sources, but the original source tree where it was built still exists, > > where will source-directory point after your changes? > > It'll point to the original source tree if you're running Emacs out of > the build directory. If you're running Emacs out of the installed > directory, it will point to the installed source tree. In that case, I will repeat my suggestion to have a separate variable for the installed sources, because otherwise we are making an incompatible behavior change. > > Let's consider builds > > that aren't meant to be reproducible. > > Although we can do that, generally speaking it's better when there's no > difference between reproducible and irreproducible builds, as that's one > less thing to worry about when maintaining and debugging. All the rest being equal, yes. But all the rest is not equal in this case, because your proposal changes a long-standing behavior in a very reasonable use case. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-23 18:24 ` Eli Zaretskii @ 2020-01-25 0:47 ` Paul Eggert 2020-01-25 7:58 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2020-01-25 0:47 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, michael.albinus, 37527-done [-- Attachment #1: Type: text/plain, Size: 332 bytes --] On 1/23/20 10:24 AM, Eli Zaretskii wrote: > In that case, I will repeat my suggestion to have a separate variable > for the installed sources, because otherwise we are making an > incompatible behavior change. OK, I did it that way by installing the attached patch instead; the new separate variable is 'emacs-source-directory'. [-- Attachment #2: 0001-Install-C-source-code-for-C-h-f-etc.patch --] [-- Type: text/x-patch, Size: 15014 bytes --] From a0a70d7e1fe2237c1b0f374b72aba324b7de95fa Mon Sep 17 00:00:00 2001 From: Paul Eggert <eggert@cs.ucla.edu> Date: Fri, 24 Jan 2020 16:41:38 -0800 Subject: [PATCH] Install C source code for C-h f etc. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without this change, on typical GNU/Linux distributions like Debian, the first button of ‘C-h f car RET’ does not work because the source code for ‘car’ is not installed (Bug#37527). Fix this by installing the (compressed) C source code alongside the (compressed) Lisp source code that is already installed. This adds about 3 MB (about 2%) to the size of the installed files on my platform. * Makefile.in (emacs_srcdir): New macro. (epaths-force): Substitute PATH_EMACS_SOURCE. (install-c-src): New rule, that installs a copy of the C source code if emacs_srcdir says to. (install-arch-indep): Depend on it. * configure.ac (emacs_srcdir): New var. Add support for --disable-install-srcdir. * lisp/emacs-lisp/find-func.el (find-function-C-source-directory): Look in emacs-source-directory first. (find-function-C-source): Also look for gzipped source files. * lisp/startup.el (normal-top-level): Also recode emacs-source-directory. * src/epaths.in (PATH_EMACS_SOURCE): New macro. * src/lread.c: Include dosname.h, for IS_ABSOLUTE_FILE_NAME. (syms_of_lread): New var emacs-source-directory. --- INSTALL | 65 ++++++++++++++++++------------------ Makefile.in | 31 +++++++++++++++-- configure.ac | 14 ++++++++ etc/NEWS | 9 +++++ lisp/emacs-lisp/find-func.el | 11 ++++-- lisp/startup.el | 3 +- src/epaths.in | 4 +++ src/lread.c | 10 +++++- 8 files changed, 108 insertions(+), 39 deletions(-) diff --git a/INSTALL b/INSTALL index 2d257f9ce6..cb12e4a17a 100644 --- a/INSTALL +++ b/INSTALL @@ -214,41 +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). + +DEBUGGING AN INSTALLED EMACS + +* Installed Emacs source code + +Emacs installs a compressed copy of much of its source code, to make +it easy for users to read the source code of Emacs via commands like +M-x describe-function (C-h f) to display the definition of a function. +This compressed copy ordinarily includes both the Elisp source code +that Emacs is mostly written in, as well as the C source code for the +core Emacs executable. + * 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'. +sources and debug symbols of Emacs. They can help you debug the +installed Emacs on the C level. The procedures for installing these +packages depend on the GNU/Linux system that you use. + +Emacs debugging symbols are distributed by a debug package if one +exists for your system. 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 e.g. 'emacs25'). +On Red Hat-based systems, the corresponding command is 'dnf +debuginfo-install emacs'; this may require adding the *-debuginfo +repositories first, via 'dnf config-manager --set-enabled +fedora-debuginfo updates-debuginfo'. + +Some systems also have an Emacs source package that is also helpful +when debugging the installed Emacs. To unpack an Emacs source package +into the current directory on Debian-based systems, you can use a +command like 'apt-get source emacs' (on older systems, replace 'emacs' +with e.g. 'emacs25'); you may first need to add the appropriate +'source' URIs to your sources.list. On Red Hat-based systems, +installing the debugging symbols automatically installs the +corresponding source package in the appropriate location. DETAILED BUILDING AND INSTALLATION: diff --git a/Makefile.in b/Makefile.in index 2c82c49fba..adefa98fd0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -266,6 +266,9 @@ etcdir= # once. archlibdir=@archlibdir@ +# Where to install Emacs C source code, or empty if it is not installed. +emacs_srcdir=@emacs_srcdir@ + # Where to put the etc/DOC file. etcdocdir=@etcdocdir@ @@ -374,6 +377,7 @@ epaths-force: -e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";' \ -e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \ -e 's;\(#.*PATH_GAME\).*$$;\1 $(PATH_GAME);' \ + -e 's;\(#.*PATH_EMACS_SOURCE\).*$$;\1 "${emacs_srcdir}";' \ -e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \ ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h @@ -461,7 +465,7 @@ $(srcdir)/configure: # ==================== Installation ==================== .PHONY: install install-arch-dep install-arch-indep install-etcdoc install-info -.PHONY: install-man install-etc install-strip install-$(NTDIR) +.PHONY: install-man install-c-src install-etc install-strip install-$(NTDIR) .PHONY: uninstall uninstall-$(NTDIR) ## If we let lib-src do its own installation, that means we @@ -568,7 +572,8 @@ set_installuser= ## work correctly, and therefore no idea when tar can be replaced. ## See also these comments from 2004 about cp -r working fine: ## https://lists.gnu.org/r/autoconf-patches/2004-11/msg00005.html -install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} +install-arch-indep: lisp install-info install-man install-c-src \ + $(INSTALL_ARCH_INDEP_EXTRA) umask 022 && $(MKDIR_P) "$(DESTDIR)$(includedir)" $(INSTALL_DATA) src/emacs-module.h "$(DESTDIR)$(includedir)/emacs-module.h" -set ${COPYDESTS} ; \ @@ -700,6 +705,28 @@ install-man: ${GZIP_PROG} -9n "$(DESTDIR)${man1dir}/$${dest}" || true; \ done +install-c-src: +ifneq (,$(emacs_srcdir)) + -unset CDPATH; \ + umask 022; $(MKDIR_P) "$(DESTDIR)$(emacs_srcdir)/src" && \ + exp_sourcesrcdir=`cd "$(DESTDIR)$(emacs_srcdir)/src" && /bin/pwd` && \ + [ "`cd $(srcdir)/src && /bin/pwd`" = "$$exp_sourcesrcdir" ] || { \ + $(set_installuser); \ + printf 'Copying compressed C sources to %s ...\n' \ + "$(DESTDIR)$(emacs_srcdir)/src"; \ + for file in `cd $(srcdir) && echo src/*.[cm]`; do \ + installed_file="$(DESTDIR)$(emacs_srcdir)/$$file" && \ + $(INSTALL_DATA) "$$file" "$$installed_file" && \ + [ -z "$(GZIP_PROG)" ] || { \ + rm -f "$$installed_file.gz" && \ + $(GZIP_PROG) -9n "$$installed_file" && \ + installed_file=$$installed_file.gz; \ + } || exit; \ + chown $$installuser "$$installed_file" || true; \ + done; \ + } +endif + ## Install those items from etc/ that need to end up elsewhere. ## If you prefer, choose "emacs22" at installation time. diff --git a/configure.ac b/configure.ac index 27e44dacfb..4de83c6b26 100644 --- a/configure.ac +++ b/configure.ac @@ -194,6 +194,7 @@ lisppath='${locallisppath}:${standardlisppath}' etcdir='${datadir}/emacs/${version}/etc' archlibdir='${libexecdir}/emacs/${version}/${configuration}' +emacs_srcdir='${datadir}/emacs/${version}' etcdocdir='${datadir}/emacs/${version}/etc' gamedir='${localstatedir}/games/emacs' @@ -540,6 +541,15 @@ AC_DEFUN locallisppath=${enableval} locallisppathset=yes fi) +AC_ARG_ENABLE([install-srcdir], + [AS_HELP_STRING([--disable-install-srcdir], + [do not install low-level Emacs source code useful for debugging.])], + [case $enableval in + yes) ;; + no) emacs_srcdir=;; + *) AC_MSG_ERROR([invalid install-srcdir]);; + esac]) + AC_ARG_ENABLE(checking, [AS_HELP_STRING([--enable-checking@<:@=LIST@:>@], [enable expensive checks. With LIST, @@ -2048,6 +2058,9 @@ AC_DEFUN dnl This one isn't really used, only archlibdir is. libexecdir="\${ns_appbindir}/libexec" archlibdir="\${ns_appbindir}/libexec" + case $emacs_srcdir in + ?*) emacs_srcdir="\${ns_appresdir}";; + esac etcdocdir="\${ns_appresdir}/etc" etcdir="\${ns_appresdir}/etc" dnl FIXME maybe set datarootdir instead. @@ -5230,6 +5243,7 @@ AC_DEFUN AC_SUBST(x_default_search_path) AC_SUBST(etcdir) AC_SUBST(archlibdir) +AC_SUBST([emacs_srcdir]) AC_SUBST(etcdocdir) AC_SUBST(bitmapdir) AC_SUBST(gamedir) diff --git a/etc/NEWS b/etc/NEWS index 5395f2ccfb..c3a71ade8a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -58,6 +58,12 @@ shaping, so 'configure' now recommends that combination. ** The ftx font backend driver has been removed. It was declared obsolete in Emacs 27.1. +--- +** Emacs now installs a copy of its C source code, used for debugging help. +For example, pressing the first button in the *Help* buffer generated +by 'C-h f car RET' now takes you to a copy of the C-language +implementation of the function 'car'. + \f * Startup Changes in Emacs 28.1 @@ -142,6 +148,9 @@ called when the function object is garbage-collected. Use ** 'parse-time-string' can now parse ISO 8601 format strings, such as "2020-01-15T16:12:21-08:00". +** The new variable 'emacs-source-directory' gives the Emacs source +code location. + \f * Changes in Emacs 28.1 on Non-Free Operating Systems diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index 167ead3ce0..be53324f14 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el @@ -219,8 +219,10 @@ find-library--from-load-history (locate-file basename (list dir) (find-library-suffixes))))))) (defvar find-function-C-source-directory - (let ((dir (expand-file-name "src" source-directory))) - (if (file-accessible-directory-p dir) dir)) + (let ((dir (expand-file-name "src" emacs-source-directory))) + (if (file-accessible-directory-p dir) dir + (setq dir (expand-file-name "src" source-directory)) + (if (file-accessible-directory-p dir) dir))) "Directory where the C source files of Emacs can be found. If nil, do not try to find the source code of functions and variables defined in C.") @@ -245,7 +247,10 @@ find-function-C-source (let ((dir (or find-function-C-source-directory (read-directory-name "Emacs C source dir: " nil nil t)))) (setq file (expand-file-name file dir)) - (if (file-readable-p file) + (if (or (file-readable-p file) + (let ((file-gz (concat file ".gz"))) + (and (file-readable-p file-gz) + (setq file file-gz)))) (if (null find-function-C-source-directory) (setq find-function-C-source-directory dir)) (error "The C source file %s is not available" diff --git a/lisp/startup.el b/lisp/startup.el index 1f545c6692..676fb35e00 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -623,7 +623,8 @@ normal-top-level (set pathsym (mapcar (lambda (dir) (decode-coding-string dir coding t)) path))))) - (dolist (filesym '(data-directory doc-directory exec-directory + (dolist (filesym '(data-directory doc-directory emacs-source-directory + exec-directory installation-directory invocation-directory invocation-name source-directory diff --git a/src/epaths.in b/src/epaths.in index 3cadd160ec..554fdd7228 100644 --- a/src/epaths.in +++ b/src/epaths.in @@ -73,5 +73,9 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ /* Where Emacs should store game score files. */ #define PATH_GAME "/usr/local/var/games/emacs" +/* Where Emacs should look for its own installed source code, + or the empty string if the source code is not installed. */ +#define PATH_EMACS_SOURCE "/usr/local/share/emacs" + /* Where Emacs should look for the application default file. */ #define PATH_X_DEFAULTS "/usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:/usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S" diff --git a/src/lread.c b/src/lread.c index 69dd73912b..274491f022 100644 --- a/src/lread.c +++ b/src/lread.c @@ -44,6 +44,7 @@ #define DEFINE_SYMBOLS #include "blockinput.h" #include "pdumper.h" #include <c-ctype.h> +#include <dosname.h> #include <vla.h> #ifdef MSDOS @@ -4992,11 +4993,18 @@ syms_of_lread (void) DEFVAR_LISP ("source-directory", Vsource_directory, doc: /* Directory in which Emacs sources were found when Emacs was built. -You cannot count on them to still be there! */); +You cannot count on them to still be there! Also see +`emacs-source-directory'. */); Vsource_directory = Fexpand_file_name (build_string ("../"), Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH, 0))); + DEFVAR_LISP ("emacs-source-directory", Vemacs_source_directory, + doc: /* Directory where Emacs sources can be found. */); + Vemacs_source_directory = (IS_ABSOLUTE_FILE_NAME (PATH_EMACS_SOURCE) + ? build_string (PATH_EMACS_SOURCE) + : Vsource_directory); + DEFVAR_LISP ("preloaded-file-list", Vpreloaded_file_list, doc: /* List of files that were preloaded (when dumping Emacs). */); Vpreloaded_file_list = Qnil; -- 2.24.1 ^ permalink raw reply related [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-25 0:47 ` Paul Eggert @ 2020-01-25 7:58 ` Eli Zaretskii 2020-01-26 9:00 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2020-01-25 7:58 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: stefan@marxist.se, michael.albinus@gmx.de, rgm@gnu.org, > 37527-done@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Fri, 24 Jan 2020 16:47:49 -0800 > > OK, I did it that way by installing the attached patch instead; the new > separate variable is 'emacs-source-directory'. Thanks, but the name of this variable gives no clue about the sources being installed as part of "make install", and neither does its documentation. How about emacs-installed-source-directory? > +DEBUGGING AN INSTALLED EMACS > + > +* Installed Emacs source code > + > +Emacs installs a compressed copy of much of its source code, to make "optionally installs", right? This is an opt-in feature, right? > @@ -374,6 +377,7 @@ epaths-force: > -e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";' \ > -e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \ > -e 's;\(#.*PATH_GAME\).*$$;\1 $(PATH_GAME);' \ > + -e 's;\(#.*PATH_EMACS_SOURCE\).*$$;\1 "${emacs_srcdir}";' \ > -e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \ > ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h The epath-force-w32 part needs a similar change. > +AC_ARG_ENABLE([install-srcdir], > + [AS_HELP_STRING([--disable-install-srcdir], > + [do not install low-level Emacs source code useful for debugging.])], I don't think we agreed to make this on by default, did we? > +** The new variable 'emacs-source-directory' gives the Emacs source > +code location. This should explain that this is a copy of the sources, different from the original source tree where Emacs was built. > (defvar find-function-C-source-directory > - (let ((dir (expand-file-name "src" source-directory))) > - (if (file-accessible-directory-p dir) dir)) > + (let ((dir (expand-file-name "src" emacs-source-directory))) > + (if (file-accessible-directory-p dir) dir > + (setq dir (expand-file-name "src" source-directory)) > + (if (file-accessible-directory-p dir) dir))) This is backwards, IMO: it should first try the original source tree, and only next the installed sources. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-25 7:58 ` Eli Zaretskii @ 2020-01-26 9:00 ` Paul Eggert 2020-01-26 16:13 ` Eli Zaretskii 0 siblings, 1 reply; 55+ messages in thread From: Paul Eggert @ 2020-01-26 9:00 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, michael.albinus, 37527 [-- Attachment #1: Type: text/plain, Size: 1972 bytes --] On 1/24/20 11:58 PM, Eli Zaretskii wrote: > Thanks, but the name of this variable gives no clue about the sources > being installed as part of "make install", and neither does its > documentation. How about emacs-installed-source-directory? We don't use 'installed-' in other names that have similar roles, e.g., 'data-directory'. These variables and their uses don't care how the files got there, and their names and documentation should focus on what the variables are used for, not on the build process that set them up. >> +Emacs installs a compressed copy of much of its source code, to make > > "optionally installs", right? This is an opt-in feature, right? It's optional, but it's opt-out. I installed the attached patch, which changes the wording to "typically installs". I thought it pretty clear during the discussion that it would be opt-out; that's what my original patch proposed, anyway. I don't see why we'd want it to be opt-in. >> +** The new variable 'emacs-source-directory' gives the Emacs source >> +code location. > > This should explain that this is a copy of the sources, different > from the original source tree where Emacs was built. Also done in the attached patch. >> (defvar find-function-C-source-directory >> - (let ((dir (expand-file-name "src" source-directory))) >> - (if (file-accessible-directory-p dir) dir)) >> + (let ((dir (expand-file-name "src" emacs-source-directory))) >> + (if (file-accessible-directory-p dir) dir >> + (setq dir (expand-file-name "src" source-directory)) >> + (if (file-accessible-directory-p dir) dir))) > > This is backwards, IMO: it should first try the original source tree, > and only next the installed sources. The original source tree location is unreliable and is documented to be unreliable, whereas the installed sources are supposed to match the Emacs you're running and that is more useful for C-h f and friends. I'd rather try the reliable copy first. [-- Attachment #2: 0001-Improve-doc-for-emacs-source-directory-Bug-36527.patch --] [-- Type: text/x-patch, Size: 1602 bytes --] From d438f86698b69bd4a245724f7efcfa708d4b336f Mon Sep 17 00:00:00 2001 From: Paul Eggert <eggert@cs.ucla.edu> Date: Sun, 26 Jan 2020 00:58:57 -0800 Subject: [PATCH] Improve doc for emacs-source-directory (Bug#36527). --- INSTALL | 4 ++-- etc/NEWS | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/INSTALL b/INSTALL index cb12e4a17a..7a1b46872d 100644 --- a/INSTALL +++ b/INSTALL @@ -219,8 +219,8 @@ DEBUGGING AN INSTALLED EMACS * Installed Emacs source code -Emacs installs a compressed copy of much of its source code, to make -it easy for users to read the source code of Emacs via commands like +Emacs typically installs a compressed copy of much of its source code, +to make it easy for users to read Emacs source code via commands like M-x describe-function (C-h f) to display the definition of a function. This compressed copy ordinarily includes both the Elisp source code that Emacs is mostly written in, as well as the C source code for the diff --git a/etc/NEWS b/etc/NEWS index c3a71ade8a..276b8f46e8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -148,8 +148,9 @@ called when the function object is garbage-collected. Use ** 'parse-time-string' can now parse ISO 8601 format strings, such as "2020-01-15T16:12:21-08:00". -** The new variable 'emacs-source-directory' gives the Emacs source -code location. +** The new variable 'emacs-source-directory' gives the location of +a copy of the Emacs source code, which is now typically installed as a +set of compressed source-code files. \f * Changes in Emacs 28.1 on Non-Free Operating Systems -- 2.17.1 ^ permalink raw reply related [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-26 9:00 ` Paul Eggert @ 2020-01-26 16:13 ` Eli Zaretskii 2020-01-26 18:18 ` Paul Eggert 0 siblings, 1 reply; 55+ messages in thread From: Eli Zaretskii @ 2020-01-26 16:13 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: stefan@marxist.se, michael.albinus@gmx.de, rgm@gnu.org, > 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Sun, 26 Jan 2020 01:00:34 -0800 > > Thanks, but the name of this variable gives no clue about the sources > being installed as part of "make install", and neither does its > documentation. How about emacs-installed-source-directory? > > We don't use 'installed-' in other names that have similar roles, e.g., 'data-directory'. These variables and their uses don't care how the files got there, and their names and documentation should focus on what the variables are used for, not on the build process that set them up. The files in those directories are always installed, and we never reference them in the original source tree, so this is different. > I thought it pretty clear during the discussion that it would be opt-out; that's what my original patch proposed, anyway. I don't see why we'd want it to be opt-in. The discussion back then indicates that this wasn't clear at all. I suggested this to be off by default right at the beginning of the discussion, and proposed to wait to hear user feedback first, see https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg00581.html Andreas said we should instead teach Emacs to look for the sources in the debug source directory, see https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg00584.html Several other people opined that installing sources shouldn't be the default, and some said right away that they will disable this if installed. Also, there was some kind of consensus that providing sources to be installed by end-users is something the distros should do, and distros don't need this turned on by default. By contrast, users who build their own Emacs are not very likely to want the sources installed the second time. Therefore, it sounds like making this the default is premature, and we should change it to be an opt-in feature. > (defvar find-function-C-source-directory > - (let ((dir (expand-file-name "src" source-directory))) > - (if (file-accessible-directory-p dir) dir)) > + (let ((dir (expand-file-name "src" emacs-source-directory))) > + (if (file-accessible-directory-p dir) dir > + (setq dir (expand-file-name "src" source-directory)) > + (if (file-accessible-directory-p dir) dir))) > > This is backwards, IMO: it should first try the original source tree, > and only next the installed sources. > > The original source tree location is unreliable and is documented to be unreliable, whereas the installed sources are supposed to match the Emacs you're running and that is more useful for C-h f and friends. I'd rather try the reliable copy first. Which one is the reliable one depends on whether this option was specified at configure time, and for users who install precompiled distributions, also on whether they decide to install the sources. So they are both unreliable, but Emacs developers are much more likely to have source-directory populated, so we should start with that. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-26 16:13 ` Eli Zaretskii @ 2020-01-26 18:18 ` Paul Eggert 2020-01-26 19:24 ` Eli Zaretskii 2020-01-26 20:06 ` Michael Albinus 0 siblings, 2 replies; 55+ messages in thread From: Paul Eggert @ 2020-01-26 18:18 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, michael.albinus, 37527 On 1/26/20 8:13 AM, Eli Zaretskii wrote: > they are both unreliable Only if we make them so. As things stand, emacs-source-directory is more reliable than source-directory is, and if we remove the configure-time option to omit installation of source code (a step I favor) we will make emacs-source-directory even more reliable than it is now. It's long past time that we stopped making Emacs source code a second-class citizen. The GNU philosophy is that it should be easy to see the source, and we should be guided by that philosophy here. We cannot rely on distributors to make things easy here. Some distributors do not install source; others install it in different places, only optionally, and do so in obscure ways that most users don't know about. Distributors will follow our lead if we install the source in a well-specified place. If we tried instead to find the nook or cranny (if any) where the current distributor squirrels away the Emacs source code, this problem would continue to be a maintenance headache for us. It's not worth the hassle. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-26 18:18 ` Paul Eggert @ 2020-01-26 19:24 ` Eli Zaretskii 2020-01-26 20:09 ` Michael Albinus 2020-01-27 21:17 ` Paul Eggert 2020-01-26 20:06 ` Michael Albinus 1 sibling, 2 replies; 55+ messages in thread From: Eli Zaretskii @ 2020-01-26 19:24 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: stefan@marxist.se, michael.albinus@gmx.de, rgm@gnu.org, > 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Sun, 26 Jan 2020 10:18:38 -0800 > > On 1/26/20 8:13 AM, Eli Zaretskii wrote: > > they are both unreliable > > Only if we make them so. As things stand, emacs-source-directory is more > reliable than source-directory is, and if we remove the configure-time option to > omit installation of source code (a step I favor) we will make > emacs-source-directory even more reliable than it is now. > > It's long past time that we stopped making Emacs source code a second-class > citizen. The GNU philosophy is that it should be easy to see the source, and we > should be guided by that philosophy here. > > We cannot rely on distributors to make things easy here. Some distributors do > not install source; others install it in different places, only optionally, and > do so in obscure ways that most users don't know about. Distributors will follow > our lead if we install the source in a well-specified place. If we tried instead > to find the nook or cranny (if any) where the current distributor squirrels away > the Emacs source code, this problem would continue to be a maintenance headache > for us. It's not worth the hassle. Sorry, I cannot be convinced by reiterating the same views and high-level abstract ideas. We had a discussion, where no consensus was reached about making this the default. I don't see why would you decide to unilaterally override all those valid opinions to the contrary. Please make this opt-in. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-26 19:24 ` Eli Zaretskii @ 2020-01-26 20:09 ` Michael Albinus 2020-01-27 21:17 ` Paul Eggert 1 sibling, 0 replies; 55+ messages in thread From: Michael Albinus @ 2020-01-26 20:09 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Paul Eggert, stefan, 37527 Eli Zaretskii <eliz@gnu.org> writes: > Sorry, I cannot be convinced by reiterating the same views and > high-level abstract ideas. We had a discussion, where no consensus > was reached about making this the default. FTR, I have been, and still am, with Eli here. Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-26 19:24 ` Eli Zaretskii 2020-01-26 20:09 ` Michael Albinus @ 2020-01-27 21:17 ` Paul Eggert 2020-01-28 3:22 ` Eli Zaretskii 1 sibling, 1 reply; 55+ messages in thread From: Paul Eggert @ 2020-01-27 21:17 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, michael.albinus, 37527 On 1/26/20 11:24 AM, Eli Zaretskii wrote: > Please make this opt-in. If that's the case, let's revert the patch. Later we could try something fancier along the lines Andreas suggested, perhaps involving using distributors' already-existing locations since that's more likely to work (albeit not that likely, alas) than a build-time opt-in which is pretty much a recipe for failure. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-27 21:17 ` Paul Eggert @ 2020-01-28 3:22 ` Eli Zaretskii 0 siblings, 0 replies; 55+ messages in thread From: Eli Zaretskii @ 2020-01-28 3:22 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, michael.albinus, 37527 > Cc: stefan@marxist.se, michael.albinus@gmx.de, rgm@gnu.org, > 37527@debbugs.gnu.org > From: Paul Eggert <eggert@cs.ucla.edu> > Date: Mon, 27 Jan 2020 13:17:22 -0800 > > On 1/26/20 11:24 AM, Eli Zaretskii wrote: > > Please make this opt-in. > > If that's the case, let's revert the patch. Later we could try something > fancier along the lines Andreas suggested, perhaps involving using > distributors' already-existing locations Fine with me, thanks. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-26 18:18 ` Paul Eggert 2020-01-26 19:24 ` Eli Zaretskii @ 2020-01-26 20:06 ` Michael Albinus 2020-01-26 20:10 ` Eli Zaretskii 1 sibling, 1 reply; 55+ messages in thread From: Michael Albinus @ 2020-01-26 20:06 UTC (permalink / raw) To: Paul Eggert; +Cc: stefan, 37527 Paul Eggert <eggert@cs.ucla.edu> writes: > Distributors will follow our lead if we install the source in a > well-specified place. Have you asked them? Best regards, Michael. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2020-01-26 20:06 ` Michael Albinus @ 2020-01-26 20:10 ` Eli Zaretskii 0 siblings, 0 replies; 55+ messages in thread From: Eli Zaretskii @ 2020-01-26 20:10 UTC (permalink / raw) To: Michael Albinus; +Cc: eggert, stefan, 37527 > From: Michael Albinus <michael.albinus@gmx.de> > Cc: Eli Zaretskii <eliz@gnu.org>, stefan@marxist.se, rgm@gnu.org, > 37527@debbugs.gnu.org > Date: Sun, 26 Jan 2020 21:06:45 +0100 > > Paul Eggert <eggert@cs.ucla.edu> writes: > > > Distributors will follow our lead if we install the source in a > > well-specified place. > > Have you asked them? AFAIU, distributors already have their solution for this -- they package the sources with the debug info distribution. Andreas mentioned that in the discussion we had back then, but his suggestion was ignored, which I think is a mistake. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-27 7:21 ` Eli Zaretskii 2019-09-27 8:48 ` Andreas Schwab 2019-09-27 8:58 ` Michael Albinus @ 2019-09-28 5:51 ` Paul Eggert 2 siblings, 0 replies; 55+ messages in thread From: Paul Eggert @ 2019-09-28 5:51 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 37527 On 9/27/19 2:21 AM, Eli Zaretskii wrote: > I thought major distros offered a source archive as well, as an > optional download, don't they? They have to; the GPL requires it. But there's no requirement that the source be installed or conveniently reachable from the executable, and in practice it typically isn't. The patch I proposed would solve this problem. It's possible other patches would also solve the problem on some platforms, if someone would take the time to develop and debug them, and we could use them on platforms where they work. However, I expect that something like the proposed patch (or something like it) would be needed as a backstop anyway, for platforms that don't have the debugging source packages that people have mentioned. So we could start with the proposed patch and mutate it or add fancier platform-specific support later if we have the time. ^ permalink raw reply [flat|nested] 55+ messages in thread
* bug#37527: [PATCH] Install C source code for for debugging help 2019-09-26 20:07 bug#37527: [PATCH] Install C source code for for debugging help Paul Eggert 2019-09-27 5:09 ` Eli Zaretskii @ 2019-09-29 13:02 ` Rohan Hendrik Jotz-Lean 1 sibling, 0 replies; 55+ messages in thread From: Rohan Hendrik Jotz-Lean @ 2019-09-29 13:02 UTC (permalink / raw) To: 37527 [-- Attachment #1: Type: text/plain, Size: 472 bytes --] Hi, I just wanted to express support for this feature, as a regular user who would have benefitted in the past. As an example, just recently my setup did not work as expected because of a bug now fixed in master. I was reluctant at first to recreate the source my distribution used to build Emacs. Had `describe-function' worked immediately I would have found the bug in two minutes; instead I ended up spending almost half an hour in total. Best wishes. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 55+ messages in thread
end of thread, other threads:[~2020-01-28 3:22 UTC | newest] Thread overview: 55+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-09-26 20:07 bug#37527: [PATCH] Install C source code for for debugging help Paul Eggert 2019-09-27 5:09 ` Eli Zaretskii 2019-09-27 6:24 ` Paul Eggert 2019-09-27 7:21 ` Eli Zaretskii 2019-09-27 8:48 ` Andreas Schwab 2019-09-27 8:58 ` Michael Albinus 2019-09-27 11:36 ` Eli Zaretskii 2019-09-27 19:59 ` Michael Albinus 2019-09-28 5:55 ` Paul Eggert 2019-09-28 7:29 ` Eli Zaretskii 2019-09-28 7:54 ` Michael Albinus 2019-09-29 7:09 ` Paul Eggert 2019-09-28 6:01 ` Eli Zaretskii 2019-09-28 9:11 ` Michael Albinus 2019-09-28 9:43 ` Eli Zaretskii 2019-10-03 13:38 ` Michael Albinus 2019-10-03 16:26 ` Eli Zaretskii 2019-10-04 8:52 ` Michael Albinus 2019-10-03 16:54 ` Basil L. Contovounesios 2019-10-04 8:54 ` Michael Albinus 2019-10-03 21:50 ` Paul Eggert 2019-10-03 22:32 ` Glenn Morris 2019-10-04 1:28 ` Paul Eggert 2019-10-04 8:57 ` Michael Albinus 2019-10-04 9:20 ` Michael Albinus 2019-10-06 7:48 ` Paul Eggert 2019-10-07 15:17 ` Michael Albinus 2019-10-07 19:48 ` Paul Eggert 2019-10-08 7:47 ` Eli Zaretskii 2019-10-08 9:54 ` Michael Albinus 2019-10-08 11:58 ` Eli Zaretskii 2020-01-20 19:12 ` Stefan Kangas 2020-01-21 9:13 ` Paul Eggert 2020-01-21 17:02 ` Eli Zaretskii 2020-01-21 17:48 ` Paul Eggert 2020-01-21 18:04 ` Eli Zaretskii 2020-01-22 0:27 ` Paul Eggert 2020-01-22 3:31 ` Eli Zaretskii 2020-01-23 8:58 ` Paul Eggert 2020-01-23 14:23 ` Eli Zaretskii 2020-01-23 17:42 ` Paul Eggert 2020-01-23 18:24 ` Eli Zaretskii 2020-01-25 0:47 ` Paul Eggert 2020-01-25 7:58 ` Eli Zaretskii 2020-01-26 9:00 ` Paul Eggert 2020-01-26 16:13 ` Eli Zaretskii 2020-01-26 18:18 ` Paul Eggert 2020-01-26 19:24 ` Eli Zaretskii 2020-01-26 20:09 ` Michael Albinus 2020-01-27 21:17 ` Paul Eggert 2020-01-28 3:22 ` Eli Zaretskii 2020-01-26 20:06 ` Michael Albinus 2020-01-26 20:10 ` Eli Zaretskii 2019-09-28 5:51 ` Paul Eggert 2019-09-29 13:02 ` Rohan Hendrik Jotz-Lean
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.