+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
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:
- 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:
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
@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
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
insh2.test \
install2.test \
installdir.test \
+install-info-dir.test \
instsh.test \
instsh2.test \
instsh3.test \
insh2.test \
install2.test \
installdir.test \
+install-info-dir.test \
instsh.test \
instsh2.test \
instsh3.test \
--- /dev/null
+#! /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
+
+: