Subject: 23.2; Duplicate entries in Info dir file

From: Ulrich Mueller <[email-masked]>
Date: Sun, 30 Jan 2011 15:37:19 +0100

Tags: patch

If Emacs is the first or only package that installs its Info files
into an otherwise empty directory (e.g., in Gentoo Emacs is configured
with --infodir=/usr/share/info/emacs-23 to allow for multiple Emacs
versions), then all entries in the resulting dir file will occur
twice.

The bad Info dir file installed by Emacs 23.2 is attached.

The cause appears to be that the Makefile first copies the pre-made
dir file, but then also calls install-info for each Info file.

Attached patch fixes the problem for me. I suggest that this should be
applied to the emacs-23 branch.

2011-01-30  Ulrich Mueller  <[email-masked]>

	* Makefile.in (install-arch-indep): Don't run install-info if the
	pre-made Info dir file is being installed.

This is the file .../info/dir, which contains the
topmost node of the Info hierarchy, called (dir)Top.
The first time you invoke Info you start off looking at this node.

File: dir,	Node: Top	This is the top of the INFO tree

The Info Directory
******************

  The Info Directory is the top-level menu of major Info topics.
  Type "d" in Info to return to the Info Directory.  Type "q" to exit Info.
  Type "?" for a list of Info commands, or "h" to visit an Info tutorial.
  Type "m" to choose a menu item--for instance,
    "mEmacs<Return>" visits the Emacs manual.
  In Emacs Info, you can click mouse button 2 on a menu item
  or cross reference to follow it to its target.
  Each menu line that starts with a * is a topic you can select with "m".
  Every third topic has a red * to help pick the right number to type.

* Menu:

* Info: (info).         How to use the documentation browsing system.

Emacs
* Ada mode: (ada-mode).         Emacs mode for editing and compiling Ada code.
* Auth-source: (auth).          The Emacs auth-source library.
* Autotype: (autotype).         Convenient features for text that you enter 
                                  frequently in Emacs.
* CC Mode: (ccmode).            Emacs mode for editing C, C++, Objective-C, 
                                  Java, Pike, AWK, and CORBA IDL code.
* CL: (cl).                     Partial Common Lisp support for Emacs Lisp.
* Calc: (calc).                 Advanced desk calculator and mathematical tool.
* D-Bus: (dbus).                Using D-Bus in Emacs.
* Dired-X: (dired-x).           Dired Extra Features.
* EDT: (edt).                   An Emacs emulation of the EDT editor.
* ERC: (erc).                   Powerful, modular, and extensible IRC client 
                                  for Emacs.
* EUDC: (eudc).                 An Emacs client for directory servers (LDAP, 
                                  PH).
* EasyPG Assistant: (epa).      An Emacs user interface to GNU Privacy Guard.
* Ebrowse: (ebrowse).           A C++ class browser for Emacs.
* Ediff: (ediff).               A visual interface for comparing and merging 
                                  programs.
* Elisp: (elisp).               The Emacs Lisp Reference Manual.
* Emacs: (emacs).               The extensible self-documenting text editor.
* Emacs FAQ: (efaq).            Frequently Asked Questions about Emacs.
* Emacs Lisp Intro: (eintr).    A simple introduction to Emacs Lisp 
                                  programming.
* Emacs MIME: (emacs-mime).     Emacs MIME de/composition library.
* Eshell: (eshell).             A command shell implemented in Emacs Lisp.
* Flymake: (flymake).           A universal on-the-fly syntax checker.
* Forms: (forms).               Emacs package for editing data bases by 
                                  filling in forms.
* Gnus: (gnus).                 The newsreader Gnus.
* IDLWAVE: (idlwave).           Major mode and shell for IDL files.
* MH-E: (mh-e).                 Emacs interface to the MH mail system.
* Mairix: (mairix-el).          Emacs interface to the Mairix mail indexer.
* Message: (message).           Mail and news composition mode that goes with 
                                  Gnus.
* Newsticker: (newsticker).     A Newsticker for Emacs.
* Org Mode: (org).              Outline-based notes management and organizer
* PCL-CVS: (pcl-cvs).           Emacs front-end to CVS.
* PGG: (pgg).                   Emacs interface to various PGP implementations.
* Rcirc: (rcirc).               Internet Relay Chat (IRC) client.
* RefTeX: (reftex).             Emacs support for LaTeX cross-references and 
                                  citations.
* Remember: (remember).         Simple information manager for Emacs
* SASL: (sasl).                 The Emacs SASL library.
* SC: (sc).                     Supercite lets you cite parts of messages 
                                  you're replying to, in flexible ways.
* SES: (ses).                   Simple Emacs Spreadsheet
* SMTP: (smtpmail).             Emacs library for sending mail via SMTP.
* Semantic: (semantic).         Source code parser library and utilities.
* Sieve: (sieve).               Managing Sieve scripts in Emacs.
* Speedbar: (speedbar).         File/Tag summarizing utility.
* VIP: (vip).                   An older VI-emulation for Emacs.
* VIPER: (viper).               The newest Emacs VI-emulation mode.  (also, A 
                                  VI Plan for Emacs Rescue or the VI PERil.)
* Widget: (widget).             The "widget" package used by the Emacs 
                                  Customization facility.
* WoMan: (woman).               Browse UN*X Manual Pages "W.O. (without) Man".
* ede: (ede).                   Project management for Emacs
* eieio: (eieio).               Objects for Emacs
* nXML Mode: (nxml-mode).       XML editing mode with RELAX NG support.

GNU Emacs
* TRAMP: (tramp).               Transparent Remote Access, Multiple Protocol 
                                  GNU Emacs remote file access via rsh and rcp.

GNU Emacs Lisp
* Emacs Lisp Intro: (eintr).
                          A simple introduction to Emacs Lisp programming.
* Elisp: (elisp).       The Emacs Lisp Reference Manual.

Emacs editing modes
* Ada mode: (ada-mode). Emacs mode for editing and compiling Ada code.
* CC Mode: (ccmode).    Emacs mode for editing C, C++, Objective-C,
                        Java, Pike, AWK, and CORBA IDL code.
* IDLWAVE: (idlwave).   Major mode and shell for IDL files.
* nXML Mode: (nxml-mode).       XML editing mode with RELAX NG support.
* Org Mode: (org).      Outline-based notes management and organizer

Emacs network features
* EUDC: (eudc).   An Emacs client for directory servers (LDAP, PH).
* Gnus: (gnus).         The newsreader Gnus.
* Mairix: (mairix-el).  Emacs interface to the Mairix mail indexer.
* MH-E: (mh-e).         Emacs interface to the MH mail system.
* Message: (message).   Mail and news composition mode that goes with Gnus.
* Newsticker: (newsticker). A Newsticker for Emacs.
* PGG: (pgg).   Emacs interface to various PGP implementations.
* ERC: (erc).           Powerful, modular, and extensible IRC client for Emacs.
* Rcirc: (rcirc).       Internet Relay Chat (IRC) client.
* SASL: (sasl).         The Emacs SASL library.
* SC: (sc).             Supercite lets you cite parts of messages you're
                          replying to, in flexible ways.
* Sieve: (sieve).               Managing Sieve scripts in Emacs.
* TRAMP: (tramp).                Transparent Remote Access, Multiple Protocol
                                 GNU Emacs remote file access via rsh and rcp.

Emacs misc features
* Autotype: (autotype). Convenient features for text that you enter frequently
                          in Emacs.
* Calc: (calc).         Advanced desk calculator and mathematical tool.
* Dired-X: (dired-x).   Dired Extra Features.
* EasyPG Assistant: (epa).   An Emacs user interface to GNU Privacy Guard.
* Ebrowse: (ebrowse).   A C++ class browser for Emacs.
* EDE: (ede).           The Emacs Development Environment.
* Ediff: (ediff).       A visual interface for comparing and merging programs.
* EDT: (edt).           An Emacs emulation of the EDT editor.
* EIEIO: (eieio).       An object system for Emacs Lisp.
* Eshell: (eshell).     A command shell implemented in Emacs Lisp.
* Flymake: (flymake).   A universal on-the-fly syntax checker.
* Forms: (forms).       Emacs package for editing data bases
                          by filling in forms.
* PCL-CVS: (pcl-cvs).   Emacs front-end to CVS.
* RefTeX: (reftex).     Emacs support for LaTeX cross-references and citations.
* Remember: (remember). Simple information manager for Emacs.
* Semantic: (semantic). Source code parsing utilities for Emacs.
* SES: (ses).       Simple Emacs Spreadsheet
* Speedbar: (speedbar). File/Tag summarizing utility.
* VIP: (vip).           An older VI-emulation for Emacs.
* VIPER: (viper).       The newest Emacs VI-emulation mode.
                          (also, A VI Plan for Emacs Rescue
                           or the VI PERil.)
* WoMan: (woman).       Browse UN*X Manual Pages "W.O. (without) Man".

Emacs lisp libraries
* Auth-source: (auth).  A single configuration for multiple applications.
* CL: (cl).             Partial Common Lisp support for Emacs Lisp.
* D-Bus: (dbus).                Using D-Bus in Emacs.
* Emacs MIME: (emacs-mime).   Emacs MIME de/composition library.
* URL: (url).                 URL loading package.
* Widget: (widget).      The "widget" package used by the Emacs Customization
                           facility.
* SMTP: (smtpmail). Emacs library for sending mail via SMTP.

Texinfo documentation system
* Info: (info).                 How to use the documentation browsing system.

World Wide WebINFO-DIR-SECTION Emacs
* URL: (url).                   URL loading package.
--- emacs-23.2-orig/Makefile.in
+++ emacs-23.2/Makefile.in
@@ -552,31 +552,26 @@
 	thisdir=`/bin/pwd`; \
 	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
 	then \
-	  (cd $(DESTDIR)${infodir};  \
-	   if [ -f dir ]; then true; \
-	   else	\
-	     (cd $${thisdir}; \
-	      ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir; \
-	      chmod a+r $(DESTDIR)${infodir}/dir); \
-	   fi; \
-	   cd ${srcdir}/info ; \
+	  (cd ${srcdir}/info ; \
 	   for elt in $(INFO_FILES); do \
 	      test "$(MAKEINFO)" = "off" && ! test -e $$elt && continue; \
 	      for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
 	        ${INSTALL_DATA} $$f $(DESTDIR)${infodir}/$$f; \
 	        chmod a+r $(DESTDIR)${infodir}/$$f; \
 	      done; \
-	   done); \
-	else true; fi
-	-unset CDPATH; \
-	thisdir=`/bin/pwd`; \
-	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
-	then \
-	  for elt in $(INFO_FILES); do \
-	    test "$(MAKEINFO)" = "off" && ! test -e $$elt && continue; \
-	    (cd $${thisdir}; \
-	     ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \
-	  done; \
+	   done; \
+	   cd $(DESTDIR)${infodir};  \
+	   if [ -f dir ]; then \
+	      for elt in $(INFO_FILES); do \
+		 test "$(MAKEINFO)" = "off" && ! test -e $$elt && continue; \
+		 (cd $${thisdir}; \
+		  ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \
+	      done; \
+	   else	\
+	     (cd $${thisdir}; \
+	      ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir; \
+	      chmod a+r $(DESTDIR)${infodir}/dir); \
+	   fi); \
 	else true; fi
 	-chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS}
 	thisdir=`/bin/pwd`; \