emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#37527: closed ([PATCH] Install C source code for for debugging help)


From: GNU bug Tracking System
Subject: bug#37527: closed ([PATCH] Install C source code for for debugging help)
Date: Sat, 25 Jan 2020 00:49:02 +0000

Your message dated Fri, 24 Jan 2020 16:47:49 -0800
with message-id <address@hidden>
and subject line Re: bug#37527: [PATCH] Install C source code for for debugging 
help
has caused the debbugs.gnu.org bug report #37527,
regarding [PATCH] Install C source code for for debugging help
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden.)


-- 
37527: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=37527
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: [PATCH] Install C source code for for debugging help Date: Thu, 26 Sep 2019 13:07:52 -0700
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




--- End Message ---
--- Begin Message --- Subject: Re: bug#37527: [PATCH] Install C source code for for debugging help Date: Fri, 24 Jan 2020 16:47:49 -0800 User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1
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: 0001-Install-C-source-code-for-C-h-f-etc.patch
Description: Text Data


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]