]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
info: allow user to inhibit creation/update of '${infodir}/dir'
authorStefano Lattarini <stefano.lattarini@gmail.com>
Sun, 23 Oct 2011 11:19:21 +0000 (13:19 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Sun, 23 Oct 2011 17:13:55 +0000 (19:13 +0200)
With this change, we allow the user to request the install-info
rules not to update the `${infodir}/dir' file, by exporting the
environment variable `AM_UPDATE_INFO_DIR' to the value "no".
This is especially useful to distro packagers, and is a definite
improvement over our previous hack of looking whether the
`install-info' program was the Debian or GNU version -- hack
which had been silently broken with recent versions of debian
install-info BTW (probably since dpkg 1.15.4, 2009-09-06).
This change fixes automake bug#9773.  See also Debian Bug#543992.

* lib/am/texinfos.am: Don't look anymore at the output of
`install-info --version' to decide whether to use it to update
the `${infodir}/dir' or not; instead, honour the environment
variable `AM_UPDATE_INFO_DIR'.
* tests/install-info-dir.test: New test.
* tests/Makefile.am (TESTS): Add it.
* tests/defs: Also unset `AM_UPDATE_INFO_DIR', to avoid unwanted
interferences from the environment.
* doc/automake.texi (Texinfo): Update.
* NEWS: Likewise.
* THANKS: Likewise.
Report by Jonathan Nieder.

ChangeLog
NEWS
THANKS
doc/automake.texi
lib/am/texinfos.am
tests/Makefile.am
tests/Makefile.in
tests/install-info-dir.test [new file with mode: 0755]

index 0836c77dfa88d6be311aaadde7b564c7c48d6e31..44d77f88b04bd2e2f7c9ead5e9b5d0e145a37cb6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2011-10-23  Stefano Lattarini  <stefano.lattarini@gmail.com>
+
+       info: allow user to inhibit creation/update of '${infodir}/dir'
+       With this change, we allow the user to request the install-info
+       rules not to update the `${infodir}/dir' file, by exporting the
+       environment variable `AM_UPDATE_INFO_DIR' to the value "no".
+       This is especially useful to distro packagers, and is a definite
+       improvement over our previous hack of looking whether the
+       `install-info' program was the Debian or GNU version -- hack
+       which had been silently broken with recent versions of debian
+       install-info BTW (probably since dpkg 1.15.4, 2009-09-06).
+       This change fixes automake bug#9773.  See also Debian Bug#543992.
+       * lib/am/texinfos.am: Don't look anymore at the output of
+       `install-info --version' to decide whether to use it to update
+       the `${infodir}/dir' or not; instead, honour the environment
+       variable `AM_UPDATE_INFO_DIR'.
+       * tests/install-info-dir.test: New test.
+       * tests/Makefile.am (TESTS): Add it.
+       * tests/defs: Also unset `AM_UPDATE_INFO_DIR', to avoid unwanted
+       interferences from the environment.
+       * doc/automake.texi (Texinfo): Update.
+       * NEWS: Likewise.
+       * THANKS: Likewise.
+       Report by Jonathan Nieder.
+
 2011-10-19  Stefano Lattarini  <stefano.lattarini@gmail.com>
 
        dejagnu: allow the package developer to extend site.exp
diff --git a/NEWS b/NEWS
index 92c773519127131dc454dad3d628dec909da5761..fe1dc9729091b467f237e82aa89dee5667144666 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -44,6 +44,10 @@ New in 1.11.0a:
     file generated by automake-provided rules by defining the special make
     variable `$(EXTRA_DEJAGNU_SITE_CONFIG)'.
 
+  - The `install-info' rule can now be instructed not to create/update
+    the `${infodir}/dir' file, by exporting the new environment variable
+    `AM_UPDATE_INFO_DIR' to the value "no".
+
 Bugs fixed in 1.11.0a:
 
 * Bugs introduced by 1.11:
@@ -127,6 +131,10 @@ Bugs fixed in 1.11.0a:
   - Now aclocal and automake, when they've to spawn autoconf or autom4te
     processes, honour the configure-time definitions of AUTOCONF and
     AUTOM4TE.
+
+  - The `install-info' recipe does not try anymore to guess whether the
+    `install-info' program is from Debian or from GNU, and adaptively
+    change its behaviour; this has proven to be frail and easy to regress.
 \f
 New in 1.11:
 
diff --git a/THANKS b/THANKS
index eae683fef6ee98a0929be762313363f2555e5327..7fa37c202886a9cd1010de89b8566082f726dc18 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -171,6 +171,7 @@ John Pierce         hawkfan@pyrotechnics.com
 John Ratliff           autoconf@technoplaza.net
 John R. Cary           cary@txcorp.com
 John W. Coomes         jcoomes@eng.Sun.COM
+Jonathan Nieder                jrnieder@gmail.com
 Josh MacDonald         jmacd@cs.berkeley.edu
 Joshua Cowan           jcowan@jcowan.reslife.okstate.edu
 js pendry              js.pendry@msdw.com
index eac380a7bc6e48cf3d3317aa592ccde91ae46573..f6039bb135dfd11393b26a98d434faa73e5c486c 100644 (file)
@@ -7963,6 +7963,13 @@ be prevented via the @code{no-installinfo} option.  In this case,
 @file{.info} files are not installed by default, and user must
 request this explicitly using @samp{make install-info}.
 
+@vindex AM_UPDATE_INFO_DIR
+By default, @code{make install-info} will try to run the
+@command{install-info} program (if available) to update (or create)
+the @file{@code{$@{infodir@}}/dir} index.  If this is undesired, it
+can be prevented by exporting the @code{AM_UPDATE_INFO_DIR} variable
+to "@code{no}".
+
 The following variables are used by the Texinfo build rules.
 
 @vtable @code
index c9dcd9d7b26692670ee1bc3be480c0ad14202bd5..80712cf4cae13f1c324a694d67523c9b750f5af0 100644 (file)
@@ -208,18 +208,16 @@ install-info-am: $(INFO_DEPS)
          echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
          $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
        @$(POST_INSTALL)
-## Only run this code if install-info actually exists, and it is not
-## the Debian install-info.  FIXME: once Debian install-info goes
-## away, we can remove this hack.  Some versions of Debian install-info
-## print their version on stderr (e.g. 1.8.3), other do it in
-## on stdout (e.g. 1.10.15).
-##
-## Do not use
-##    install-info --version 2>&1 | sed 1q | grep -v -i debian
-## as if install-info does not exist, grep -v will be happy, and
-## therefore the code will be triggered although install-info is missing.
-       @if (install-info --version && \
-            install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+## Only run this code if install-info actually exists, and if the user
+## doesn't request it not to be run (through the `AM_UPDATE_INFO_DIR'
+## environment variable).  See automake bug#9773 and Debian Bug#543992.
+       @am__run_installinfo=yes; \
+       case $$AM_UPDATE_INFO_DIR in \
+         n|no|NO) am__run_installinfo=no;; \
+         *) (install-info --version) >/dev/null 2>&1 \
+              || am__run_installinfo=no;; \
+       esac; \
+       if test $$am__run_installinfo = yes; then \
          list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
          for file in $$list; do \
 ## Strip directory
index efb4feae412cc7959600625e628d2b3dceea2cfd..54519b2f6d06f34de6c571ecc0b5903a466733f3 100644 (file)
@@ -437,6 +437,7 @@ init2.test \
 insh2.test \
 install2.test \
 installdir.test \
+install-info-dir.test \
 instsh.test \
 instsh2.test \
 instsh3.test \
index f12b81d1f78069e1637b1ad1395aacfcc1ceba29..ea7c724eae4eda26e95c4b8a2d0343af88f8eeff 100644 (file)
@@ -721,6 +721,7 @@ init2.test \
 insh2.test \
 install2.test \
 installdir.test \
+install-info-dir.test \
 instsh.test \
 instsh2.test \
 instsh3.test \
diff --git a/tests/install-info-dir.test b/tests/install-info-dir.test
new file mode 100755 (executable)
index 0000000..f75b115
--- /dev/null
@@ -0,0 +1,140 @@
+#! /bin/sh
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Checks on the `install-info' target.
+# Details about the individual checks' purposes and motivations are
+# inlined, below.
+
+# FIXME: this test is a good candidate for a conversion to TAP,
+# FIXME: and could be merged with `txinfo27.test'.
+
+required=makeinfo
+. ./defs || Exit 1
+
+cwd=`pwd` || fatal_ "cannot get current working directory"
+
+mkdir bin
+saved_PATH=$PATH; export saved_PATH
+PATH=$cwd/bin$PATH_SEPARATOR$PATH; export PATH
+
+set -e
+
+cat >> configure.in <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = foo.texi
+END
+
+cat > foo.texi << 'END'
+\input texinfo
+@setfilename foo.info
+@node Top
+Hello world!
+@bye
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+instdir=_inst
+destdir=_dest
+
+./configure --prefix="$cwd/$instdir" --infodir="$cwd/$instdir/info"
+
+$MAKE info
+test -f foo.info
+
+if install-info --version; then
+  have_installinfo=yes
+else
+  have_installinfo=no
+fi
+
+# The `install-info' target updates the `${infodir}/dir' file
+# by default (if the `install-info' program is available).
+# This should happen in a normal as well as in a DESTDIR installation.
+if test $have_installinfo = yes; then
+  $MAKE install-info
+  test -f $instdir/info/foo.info
+  test -f $instdir/info/dir
+  $MAKE DESTDIR="$cwd/$destdir" install-info
+  test -f "$destdir/$cwd/$instdir"/info/foo.info
+  test -f "$destdir/$cwd/$instdir"/info/dir
+fi
+
+rm -rf $instdir $destdir
+
+# The `install-info' target doesn't fail if the `install-info'
+# program is not available.
+cat > bin/install-info <<'END'
+#!/bin/sh
+echo error from install-info >&2
+exit 127
+END
+chmod a+x bin/install-info
+$MAKE install-info >output 2>&1 || { cat output; Exit 1; }
+cat output
+test -f $instdir/info/foo.info
+test ! -f $instdir/info/dir
+grep 'error from install-info' output && Exit 1
+
+rm -rf $instdir output
+
+if test $have_installinfo = yes; then
+  # The `install-info' target doesn't try to guess whether the `install-info'
+  # is the GNU or debian version.
+  unindent > bin/install-info <<'END'
+    #!/bin/sh
+    set -e; set -u;
+    for fd in 1 2; do
+      for str in dpkg debian Debian; do
+        eval "echo This is $str install-info >&$fd"
+      done
+    done
+    PATH=$saved_PATH; export PATH
+    exec install-info ${1+"$@"}
+END
+  $MAKE install-info
+  test -f $instdir/info/foo.info
+  test -f $instdir/info/dir
+fi
+
+rm -rf $instdir bin/install-info
+
+# The `AM_UPDATE_INFO_DIR' environment variable can be used to
+# prevent the creation or update of the `${infodir}/dir' file,
+# if set to a "no" value.
+for val in no NO n; do
+  rm -rf $instdir
+  env AM_UPDATE_INFO_DIR="$val" $MAKE install-info
+  test -f $instdir/info/foo.info
+  test ! -f $instdir/info/dir
+done
+if test $have_installinfo = yes; then
+  for val in 'yes' 'who cares!'; do
+    rm -rf $instdir
+    env AM_UPDATE_INFO_DIR="$val" $MAKE install-info
+    test -f $instdir/info/foo.info
+    test -f $instdir/info/dir
+  done
+fi
+
+rm -rf $instdir
+
+: