From 459d74ef997f15db864b0ff97cddb8c7b5b3d847 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 14 Mar 2014 13:54:12 -0400 Subject: [PATCH] Stop files with same basename messing up finder's package--builtins * lisp/Makefile.in (setwins_finder): New, excluding leim. (finder-data): Use setwins_finder. * lisp/finder.el (finder-no-scan-regexp): Add leim-list. (finder-compile-keywords): Don't skip files with same basename. Fixes: debbugs:14010 --- lisp/ChangeLog | 6 ++++++ lisp/Makefile.in | 11 ++++++++++- lisp/finder.el | 13 +++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 260a77fdca..e1d98e3f18 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,11 @@ 2014-03-14 Glenn Morris + * finder.el (finder-no-scan-regexp): Add leim-list. + (finder-compile-keywords): + Don't skip files with same basename. (Bug#14010) + * Makefile.in (setwins_finder): New, excluding leim. + (finder-data): Use setwins_finder. + * help-fns.el (help-split-fundoc, help-add-fundoc-usage) (help-function-arglist, help-make-usage): Move from here... * help.el (help-split-fundoc, help-add-fundoc-usage) diff --git a/lisp/Makefile.in b/lisp/Makefile.in index ebd2432e10..a1cd6d19ce 100644 --- a/lisp/Makefile.in +++ b/lisp/Makefile.in @@ -124,6 +124,15 @@ setwins_almost=for file in `find ${srcdir} -type d -print`; do \ esac; \ done +# Find all subdirectories except `obsolete', `term', and `leim' (and subdirs). +# We don't want the leim files listed as packages, especially +# since many share basenames with files in language/. +setwins_finder=for file in `find ${srcdir} -type d -print`; do \ + case $$file in ${srcdir}*/obsolete | ${srcdir}*/term | ${srcdir}*/leim* ) ;; \ + *) wins="$$wins$${wins:+ }$$file" ;; \ + esac; \ + done + # Find all subdirectories in which we might want to create subdirs.el. setwins_for_subdirs=for file in `find ${srcdir} -type d -print`; do \ case $$file in \ @@ -166,7 +175,7 @@ custom-deps: doit $(lisp)/finder-inf.el: $(MAKE) $(MFLAGS) finder-data finder-data: doit - $(setwins_almost); \ + $(setwins_finder); \ echo Directories: $$wins; \ $(emacs) -l finder \ --eval '(setq generated-finder-keywords-file (unmsys--file-name "$(srcdir)/finder-inf.el"))' \ diff --git a/lisp/finder.el b/lisp/finder.el index 4729389d89..ad4fda355e 100644 --- a/lisp/finder.el +++ b/lisp/finder.el @@ -135,7 +135,7 @@ Keywords and package names both should be symbols.") ;; http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00469.html ;; ldefs-boot is not auto-generated, but has nothing useful. (defvar finder-no-scan-regexp "\\(^\\.#\\|\\(loaddefs\\|ldefs-boot\\|\ -cus-load\\|finder-inf\\|esh-groups\\|subdirs\\)\\.el$\\)" +cus-load\\|finder-inf\\|esh-groups\\|subdirs\\|leim-list\\)\\.el$\\)" "Regexp matching file names not to scan for keywords.") (autoload 'autoload-rubric "autoload") @@ -194,7 +194,16 @@ from; the default is `load-path'." (and (string-match el-file-regexp f) (intern (match-string 1 f))))) (memq base-name processed)) - (push base-name processed) +;; There are multiple files in the tree with the same basename. +;; So skipping files based on basename means you randomly (depending +;; on which order the files are traversed in) miss some packages. +;; http://debbugs.gnu.org/14010 +;; You might think this could lead to two files providing the same package, +;; but it does not, because the duplicates are (at time of writing) +;; all due to files in cedet, which end up with package-override set. +;; FIXME this is obviously fragile. +;; Make the (eq base-name package) case below issue a warning? +;; (push base-name processed) (with-temp-buffer (insert-file-contents (expand-file-name f d)) (setq summary (lm-synopsis) -- 2.39.2